Loading [MathJax]/jax/output/HTML-CSS/config.js
Menu

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을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com