지난 포스팅에서 ssh 명령어의 기본적인 사용법과 유용한 옵션들을 살펴보았습니다. 하지만 매번 복잡한 IP 주소, 사용자 이름, 포트 번호 등을 일일이 입력하는 것은 여간 번거로운 일이 아닙니다. 이럴 때 SSH Config 파일을 활용하면 이런 번거로움을 한 번에 해결할 수 있습니다. 마치 즐겨찾기처럼 자주 사용하는 서버 접속 정보를 저장해두고 별칭(Alias) 으로 손쉽게 접속할 수 있습니다.

저 역시 config 파일의 존재를 모르던 "완전 초보"시절에는 '이 복잡한 ssh 연결 명령어를 어떻게 매번 작성하지?' 라는 생각에 자주 쓰는 명령어 줄을 그대로 .bashrc파일에 alias 등록을 해놓고 쓴 적도 있었습니다. 나중에 config파일 작성법을 알고 나서는 내가 얼마나 무식한 방법으로 사용했 는지 알 수 있었습니다.

SSH config 존재를 깨닫고 감탄하는 내모습


SSH Config 파일은 무엇인가요?



SSH Config 파일은 SSH 클라이언트의 동작 방식을 사용자 정의하는 설정 파일입니다. 이 파일에 특정 호스트에 대한 접속 정보(사용자 이름, 포트, 사용할 키 파일 등)를 미리 저장해두면, 나중에 접속할 때 짧은 별칭만으로 접속이 가능해집니다.

  • 위치: 일반적으로 사용자 홈 디렉토리의 .ssh 폴더 안에 config라는 이름으로 존재할 수도 있습니다. ssh를 처음 설치 하셨다면 없을 겁니다.이럴땐 만들어야 합니다.

  • 파일 생성: 만약 ~/.ssh/config 파일이 없다면, 직접 생성해 주면 됩니다. 권한을 반드시 600으로 하세요.

    touch ~/.ssh/config   
    chmod 600 ~/.ssh/config  # 보안을 위해 권한 설정은 필수!   

Config 파일 작성 규칙

Config 파일은 간단한 텍스트 파일이며, 각 호스트에 대한 설정은 Host 키워드로 시작하여 블록 형태로 작성됩니다.

기본 구조

    Host [별칭]     
        [옵션1] [값1]          
        [옵션2] [값2]     
        ...
  • Host [별칭]: 이 블록의 시작을 알리고, 여러분이 사용할 별칭(Alias) 을 정의합니다. 이 별칭을 SSH 명령어에 사용하게 됩니다. 별칭 대신 실제 호스트 주소(IP 또는 도메인)를 직접 넣을 수도 있습니다. 와일드카드 문자(*, ?)도 사용할 수 있습니다.
  • 들여쓰기: Host 아래의 옵션들은 들여쓰기를 해야 합니다. 공백이나 탭을 사용해도 되지만, 일관성을 유지하는 것이 좋습니다.
  • 옵션: Host 아래에는 해당 별칭으로 접속할 때 적용될 다양한 SSH 옵션들을 나열합니다. 이 옵션들은 이전에 ssh -옵션 형태로 사용했던 것들과 동일합니다.

자주 사용되는 옵션들

옵션 설명 예시 값
HostName 실제 접속할 서버의 IP 주소 또는 도메인 이름 192.168.1.100 또는 example.com
User 원격 서버에 접속할 사용자 계정 이름 ubuntu, ec2-user, root
Port 원격 서버의 SSH 포트 번호 (기본값 22) 2222
IdentityFile 접속 시 사용할 비공개 키 파일의 경로 ~/.ssh/id_ed25519_myserver
ForwardAgent SSH 에이전트 포워딩 활성화 (Agent Forwarding, ssh-agent 사용 시) yes
StrictHostKeyChecking 호스트 키 검사를 엄격하게 할지 여부 (yes 권장) no (초기 테스트 시 임시로 사용)
PortForwarding 포트 포워딩 허용 여부 yes
LocalForward 로컬 포트 포워딩 설정 (-L 옵션과 동일) 8080 localhost:80
ServerAliveInterval 서버가 살아있는지 확인하는 인터벌 (초 단위) 60 (연결 끊김 방지)
ServerAliveCountMax 서버 확인 실패 시 연결을 끊기 전 재시도 횟수 3

SSH Config 파일 작성 예시



자주 접속하는 몇 가지 서버에 대한 설정을 ~/.ssh/config 파일에 추가해 봅시다.

# 첫 번째 서버: 웹 서버 (별칭: webserver)
Host webserver
    HostName 192.168.1.100
    User ubuntu
    Port 2222
    IdentityFile ~/.ssh/id_ed25519_webserver # 웹 서버 전용 키 사용

# 두 번째 서버: 개발 서버 (별칭: devbox)
Host devbox
    HostName dev.example.com
    User developer
    IdentityFile ~/.ssh/id_rsa_dev # RSA 키 사용
    # 이 서버에 접속할 때 로컬 8000포트를 원격 서버의 80포트로 포워딩
    LocalForward 8000 localhost:80 

# 세 번째 서버: 모든 AWS EC2 서버 (별칭: aws-*)
Host aws-*
    User ec2-user
    IdentityFile ~/.ssh/aws_ec2_key.pem
    # 연결이 끊어지지 않도록 주기적으로 신호를 보냄
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 특정 IP 대역에 대한 일반 설정 (별칭: 10.0.0.*)
Host 10.0.0.*
    User admin
    Port 22

설명:

  • webserver: 192.168.1.100 서버에 ubuntu 사용자로 2222번 포트와 id_ed25519_webserver 키를 사용하여 접속할 수 있게 됩니다.
  • devbox: dev.example.com 서버에 developer 사용자로 id_rsa_dev 키를 사용하여 접속하며, 로컬 8000번 포트를 원격 80번 포트로 포워딩합니다.
  • aws-*: aws-로 시작하는 모든 별칭에 적용되는 설정입니다. 예를 들어 aws-prodaws-dev로 접속하면 UserIdentityFile 설정이 자동으로 적용됩니다. HostNameaws-prod로 접속 시 prod가 됩니다 (나중에 ssh aws-prod 명령어로 사용).
  • 10.0.0.*: 10.0.0.x 형태의 IP 주소에 접속할 때 자동으로 admin 사용자 및 기본 22번 포트가 적용됩니다.

사실, 위의 예시에 * 와일드카드방식을 일단 소개는 했지만, 실제로 저는 거의 저런 방식을 사용하진 않습니다. 그냥 서버하나에 설정하나 1:1로 매핑하는게 관리하기도 쉽습니다.
같은 서버를 다른 설정으로 접근하는 경우도 있기 때문에 그럴때마다 설정 하나씩 추가해놓고, 마치 레스토랑에서 메뉴판 보고 음식 고르듯이 별칭을 골라서 ssh my-alias 이런 식으로 주문만 하면 되도록 구성합니다.


SSH 접속 버튼을 누르자 네트워크로 퍼지는 마법 같은 이미지

Config 파일 사용 방법

이제 Config 파일에 설정을 저장했다면, 실제 접속은 훨씬 간단해집니다. 위 예시를 바탕으로 해볼까요?

1. 별칭으로 접속하기

별칭만 사용하여 SSH 접속 명령어를 실행합니다.

  • webserver 별칭 사용:
    ssh webserver
    Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver':
    ubuntu@webserver-ip:~ $

위 명령어는 내부적으로 ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100과 동일하게 동작합니다.

  • devbox 별칭 사용:
    ssh devbox
    Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev':
    developer@devbox-domain:~ $

(동시에 로컬 8000번 포트로 접속하면 dev.example.com의 80번 포트로 연결됨)


Config 파일 사용의 장점

  • 편의성: 길고 복잡한 SSH 명령어를 짧은 별칭으로 대체하여 입력 오류를 줄이고 시간을 절약할 수 있습니다.
  • 생산성: 자주 접속하는 서버를 빠르게 오갈 수 있어 작업 효율이 높아집니다.
  • 관리 용이성: 모든 접속 관련 설정을 한곳에서 관리할 수 있어 유지보수가 용이합니다. 예를 들어, 서버의 IP 주소가 변경되더라도 Config 파일만 수정하면 됩니다.
  • 보안: 중요한 정보(예: 키 파일 경로)를 명령어 히스토리에 남기지 않아도 됩니다.

마치며

SSH Config 파일은 SSH를 사용하는 모든 개발자와 시스템 관리자에게 필수적인 도구입니다. 이 파일을 활용하여 여러분의 SSH 접속 경험을 훨씬 더 편리하고 효율적으로 만들 수 있습니다. ~/.ssh/config 파일을 열고 여러분만의 별칭을 만들어 보세요!

SSH 와 관련된 다른 포스팅도 함께 읽어보세요! 오른쪽 검색창에서 ' ssh' 를 검색하시면 ssh 와 관련한 다양한 글을 보실 수 있습니다.

궁금한 점이 있다면 언제든지 댓글로 질문해주세요!

-- 관련글: