ssh config 설정 방법

ssh config 설정 방법

하나의 컴퓨터에서 복수의 SSH 키를 사용할 경우 SSH 접속에 사용하는 ssh 명령이 복잡해지는 단점이 있습니다. 이러한 복잡성은 SSH config 파일을 이용하여 해결할 수 있습니다.

이 문서는 SSH 키 파일을 이미 갖고있는 것을 전제로 합니다. 아직 SSH 키를 생성하지 않은 상태라면, 다음 문서를 참조하시기 바랍니다.

ssh 명령 기본 사용법

ssh 명령의 기본 사용법은 다음과 같습니다.

> ssh 사용자ID@서버명

다음과 같은 명령을 내릴 때 ssh 명령은 “~/.ssh/id_rsa” 키 파일을 사용하여, 52.79.103.139 서버에 ubuntu 계정으로 로그인을 시도합니다.

> ssh ubuntu@52.79.103.139
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

Last login: Mon Feb  1 01:44:13 2016 from 211.210.76.6
ubuntu@ip-172-31-11-175:~$ pwd
/home/ubuntu
ubuntu@ip-172-31-11-175:~$

기본 SSH 키(~/.ssh/id_rsa)가 아닌 다른 SSH 키 파일을 사용해야 한다면, 다음과 같이 -i 옵션을 사용해야 합니다.

> ssh ubuntu@52.79.103.139 -i ~/.ssh/aws-seoul.pem
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

Last login: Mon Feb  1 02:10:40 2016 from 211.210.76.6
ubuntu@ip-172-31-11-175:~$

위 명령은 SSH 키 파일을 직접 지정해야 하므로 사용하기 부담스러운 면이 있습니다. ssh 명령을 단순하게 사용하는 방법의 하나는 다음과 같은 alias를 사용하는 것입니다.

> alias awsssh="ssh ubuntu@52.79.103.139 -i ~/.ssh/aws-seoul.pem"
> awsssh
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

Last login: Mon Feb  1 02:23:47 2016 from 211.210.76.6
ubuntu@ip-172-31-11-175:~$

alias를 사용하면 명령을 쉽게 입력할 수 는 있지만 별도로 alias를 관리한다는 부담이 증가합니다.
또한 ssh 명령은 인증서, 서버 포트, 포트 포워딩 등 다양한 설정 옵션이 있으므로, 다양한 옵션 변경에 효과적으로 대응하기에 어렵다는 단점이 있습니다.

~/.ssh/config 설정 파일

여러 ssh 키 파일들을 사용할 때 발생하는 문제는 ~/.ssh/config 파일로 해결할 수 있습니다. 다음은 일반적인 형태의 ~/.ssh/config 파일 구성입니다.

### for aws
Host aws-ubuntu1
    HostName 52.79.103.139
    IdentityFile ~/.ssh/aws-seoul.pem

Host aws-ubuntu2
    HostName 52.79.103.139
    User ubuntu
    IdentityFile ~/.ssh/aws-seoul.pem   

## for git
Host github.com
    User git
    IdentityFile ~/.ssh/id_rsa_XXXXXXXXXXXX
Host bitbucket.org
    User git
    IdentityFile ~/.ssh/id_rsa_@@@@@@@@@@@@

위 설정 파일은 2개의 아마존 서버와 github 및 bitbucket 서버 설정으로 구성되어 있습니다. 위 예제에서 아마존 AWS 서버는 다음의 두 가지 방법으로 로그인할 수 있습니다. SSH config 설정을 사용할 경우, 복수의 인증서를 사용하는 상황에서도 다음과 같이 ssh 명령을 단순하게 유지할 수 있습니다.

> ssh ubuntu@aws-ubuntu1
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

Last login: Mon Feb  1 02:37:28 2016 from 211.210.76.6
ubuntu@ip-172-31-11-175:~$

아래의 경우 aws-ubuntu2에 로그인 계정명을 등록하였기 때문에 ssh 명령을 더욱 단순하게 사용 가능합니다.

> ssh aws-ubuntu2
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-74-generic x86_64)

Last login: Mon Feb  1 02:56:27 2016 from 211.210.76.6
ubuntu@ip-172-31-11-175:~$

~/.ssh/config 권한 설정

SSH 설정 파일은 다른 사용자가 사용할 경우 심각한 보안 문제가 발생할 수 있습니다. 따라서 다음과 같이 오로지 파일 소유권자만이 설정 파일을 읽을 수 있도록 권한을 제한해야 합니다.

chmod 440 ~/.ssh/config

ssh 설정 파일 구성

SSH 설정 파일의 기본 형태는 다음과 같습니다.

Host firsthost
    SSH_OPTION_1 custom_value
    SSH_OPTION_2 custom_value
    SSH_OPTION_3 custom_value

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

SSH 설정 파일의 옵션 값은 다음과 같이 3가지 방법으로 설정 할 수 있습니다. 다음 3 가지는 모두 유효한 설정입니다.

Port 4567
Port=4567
Port = 4567

호스트 맵핑

호스트 맵핑은 Host 속성과 Hostname 속성을 이용하여 실제 호스트 URL에 맵핑을 합니다.

  • Host: ssh 명령에 사용하는 이름
  • Hostname: Host에 지정된 이름이 매핑되는 실제 호스트 명
Host dev
    HostName dev.taewan.kim
    Uset admin

위와 같이 설정된 상태에서 “ssh dev”이 실행된다면 다음과 같은 명령으로 변환되어 실행됩니다.

ssh admin@dev.taewan.kim -i ~/.ssh/id_rsa"

서브 도메인 등 와일드카드 문자 지정

다음과 같이 와일드카드 문자로 호스트 명을 지정 할 수 있습니다. 이 경우 taewan.kim의 서브 도메인에 모두 적용됩니다.

Host *.taewan.kim
    User taewan
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/taewan.dev

ssh config의 주요 속성

일반 속성

  • Hostname: 연결될 서버 호스트 명으로 사용됨.
    • 선택적 속성
    • 미 설정시 Host 값이 Hostname으로 사용됨
  • User: 네트웍 커넥션에 사용되는 계정 명
  • Port: 원격 ssh 데몬이 사용하는 포트, 기본 값=22

네트웍 속성

  • ServerAliveInterval
    • 서버에 테스트 패킷을 전송하는 주기 설정
    • 초단위 설정
    • 기본 값: 0
  • ServerAliveCountMax
    • 서버에 테스트용 패킷을 전송하는 횟수를 설정
    • 서버에 추가적인 데이터 전송 없이 ServerAliveInterval의 최대 임계 값을 초과할 경우 커넥션 종료
    • 기본값: 3
    • 예: ServerAliveInterval 15, ServerAliveCountMax 3
      • 통신없이 45초 결과후 커넥션 종료
  • LogLevel
    • 클라이언트 측의 로그 레벨
    • 최소 로그: QUIET
    • 최대 로그: DEBUG3
    • 설정 값: [“QUIET”,“FATAL”,“ERROR”,“INFO”,“VERBOSE”,“DEBUG1”,“DEBUG2”,“DEBUG3”]
  • StrictHostKeyChecking
    • ~/.ssh/known_hosts에 자동으로 호스트를 추가하는 설정
    • 기본 설정은 저장을 질문 함
    • 비활성 설정: “no”
  • UserKnownHostsFile
    • 연결된 호스트에 대한 정보를 남기는 파일을 지정하는 설정
    • 기본 값: ~/.ssh/known_hosts
    • 일반적으로 이 설정을 변경하지 않음
    • StrictHostKeyChecking을 “no”로 설정할 경우에 이 설정을 “/dev/null”로 설정
  • VisualHostKey
    • 원격지의 호스트 키를 클라이언트 접속시 출력
  • Compression
    • 느린 네트웍 상에서 네트웍 패킷을 압축하는 옵션
    • 일반적인 상황에서 사용하지 않음

ssh 키 지정

  • IdentityFile
    • Host 별로 사용할 키의 위치를 지정
    • 기본값: 프로토콜에 따라 결정 됨 (~/.ssh/id_rsa or ~/.ssh/id_dsa)

Multiplexing

ssh 명령은 하나의 서버에 접속하는 여러 SSH 커넥션을 하나의 TCP 커넥션을 사용하여 연결하는 기능을 제공합니다. 복수의 SSH 커넥션으로 발생하는 부하를 제거하는 용도로 적합

  • ControlMaster
    • Multiplexing을 허용하는 옵션
    • 허용 설정 값: auto
  • ControlPath
    • 커넥션을 제어하는 용도로 사용하는 socket 파일 지정
    • /path/to/socket/%r@%h:%p
      • r: username
      • h: remote host
      • p: port
  • ControlPersist
    • 커넥션이 유지해야 할 시간을 초단위로 지정
    • 초단위 설정
    • 낮은 값을 설정할 경우 불필요한 커넥션 연결 오픈을 방지할 수 있음

요약

하나의 컴퓨터에서 여러 개의 SSH 키 파일를 유지하는 것은 매우 번거로운 일입니다. 최근에 여러 클라우드 서비스, github, bitbucket, gitlab 등 SSH 키 인증을 사용하는 서비스가 늘어나면서 ssh 키 파일 관리가 필요한 상황입니다.

ssh config 파일을 이용하면 도메인, ip 혹은 서버의 alias명 별로 접속 계정, SSH 키 파일, ssh 명령 속성 을 설정할 수 있기 때문에 ssh 명령을 간결하게 유지하는 방법을 제공합니다.

ssh config는 ~/.ssh/config파일입니다. 이 파일은 소유권자만이 접근할 수 있도록 퍼미션을 400으로 제한해야 합니다.

참고자료

작성자: 김태완
김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 한국오라클 빅데이터 팀 소속으로 빅데이터와 Machine Learning을 중점에 두고 있습니다. 최근에는 Deep Learning을 열공 중입니다.
E-mail: taewanme@gmail.com