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