When
SSH로 다수의 리모트 서버를 접근할때
Why
아래 처럼 포트번호와 아이피 주소 및 패스워드를 접속할때 마다 기억해야하기 때문에 번거로움이 있다.
ssh -i ~/.ssh/id_rsa -p 2222 admin@172.23.23.23 접속후 패스워드 입력
ssh -i ~/.ssh/db_rsa -p 443 admin@174.23.23.24 접속후 패스워드 입력
ssh -i ~/.ssh/sh_rsa -p 22 admin@178.23.23.25 접속후 패스워드 입력
What
커스텀 SSH를 만들면 아래 처럼 깔끔하게 접속 가능하다.
myssh my.cloud
myssh db.cloud
myssh sh.cloud
또한 리모트로 파일 복사가 간단하게 가능하다.
myscp my.cloud ~/Download/test.txt /var/www/
How
1. 커스텀 SSH명령어 추가
vi
~/.zshrc또는~/.bash_profile에 편집모드 i로 아래 명령줄 추가
# Configuration for Remote Server
source ~/.ssh/config.shlib;
# 커스텀 myssh 명령어 추가
myssh () {
key=$(tr '[a-z]' '[A-Z]' <<< $1)
ssh -i $(config_get $key"_KEY") $(config_get $key"_HOST") -p $(config_get $key"_PORT");
}
# 커스텀 myscp 명령어 추가
# myscp my.cloud ~/Download/test.txt /var/www/
myscp () {
key=$(tr '[a-z]' '[A-Z]' <<< $1)
scp -i $(config_get $key"_KEY") -P$(config_get $key"_PORT") ${2} $(config_get $key"_HOST"):${3};
}
:wq 로 빠져나온후
source ~/.zshrc 로 적용한다.
2. 환경설정 파일읽기 스크립트 추가
터미널에서 아래 명령어로 에디터를 연후 내용을 추가
vi ~/.ssh/config.shlib
# 편집 모드 : i 입력 후 아래 내용 붙여 넣기
config_read_file() {
(grep -E "^${2}=" -m 1 "${1}" 2>/dev/null || echo "VAR=__UNDEFINED__") | head -n 1 | cut -d '=' -f 2-;
}
config_get() {
val="$(config_read_file ~/.ssh/config.cfg "${1}")";
if [ "${val}" = "__UNDEFINED__" ]; then
val="$(config_read_file host_config "${1}")";
fi
printf -- "%s" "${val}";
}
# 저장 모드 : :wq 입력후 종료
3. 서버정보 파일 추가
터미널에서 아래 명령어로 에디터를 연후 내용을 추가
vi ~/.ssh/config.cfg
# 편집 모드 : i 입력 후 아래 내용 붙여 넣기
#------------------------------------------------------------------------#
# MY CLOUD SERVER
#------------------------------------------------------------------------#
MY.CLOUD_KEY=~/.ssh/id_rsa
MY.CLOUD_HOST=계정@접속아이피
MY.CLOUD_PORT=2222
DB.CLOUD_KEY=~/.ssh/id_rsa
DB.CLOUD_HOST=계정@접속아이피
DB.CLOUD_PORT=포트번호
4. 커스텀 명령어 입력
터미널에서 커스텀 명령어를 실행
myssh my.cloud
# or
myssh db.cloud