지난 포스팅에서 `ssh` 명령어의 기본적인 사용법과 유용한 옵션들을 살펴보았습니다. 하지만 매번 복잡한 IP 주소, 사용자 이름, 포트 번호 등을 일일이 입력하는 것은 여간 번거로운 일이 아닙니다. 이럴 때 **SSH Config 파일**을 활용하면 이런 번거로움을 한 번에 해결할 수 있습니다. 마치 즐겨찾기처럼 자주 사용하는 서버 접속 정보를 저장해두고 **별칭(Alias)** 으로 손쉽게 접속할 수 있습니다. 저 역시 config 파일의 존재를 모르던 "완전 초보"시절에는 '이 복잡한 ssh 연결 명령어를 어떻게 매번 작성하지?' 라는 생각에 자주 쓰는 명령어 줄을 그대로 `.bashrc`파일에 alias 등록을 해놓고 쓴 적도 있었습니다. 나중에 `config`파일 작성법을 알고 나서는 내가 얼마나 무식한 방법으로 사용했 는지 알 수 있었습니다. ![SSH config 존재를 깨닫고 감탄하는 내모습](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## SSH Config 파일은 무엇인가요? {#sec-481141e7802b} **SSH Config 파일**은 SSH 클라이언트의 동작 방식을 사용자 정의하는 설정 파일입니다. 이 파일에 특정 호스트에 대한 접속 정보(사용자 이름, 포트, 사용할 키 파일 등)를 미리 저장해두면, 나중에 접속할 때 짧은 별칭만으로 접속이 가능해집니다. * **위치:** 일반적으로 사용자 홈 디렉토리의 `.ssh` 폴더 안에 `config`라는 이름으로 존재할 수도 있습니다. ssh를 처음 설치 하셨다면 없을 겁니다.이럴땐 만들어야 합니다. * **파일 생성:** 만약 `~/.ssh/config` 파일이 없다면, 직접 생성해 주면 됩니다. **권한을 반드시 600으로 하세요.** ```bash touch ~/.ssh/config chmod 600 ~/.ssh/config # 보안을 위해 권한 설정은 필수! ``` --- ## Config 파일 작성 규칙 {#sec-a6ba2fff88f5} Config 파일은 간단한 텍스트 파일이며, 각 호스트에 대한 설정은 `Host` 키워드로 시작하여 블록 형태로 작성됩니다. #### 기본 구조 ```bash Host [별칭] [옵션1] [값1] [옵션2] [값2] ... ``` * **`Host [별칭]`**: 이 블록의 시작을 알리고, 여러분이 사용할 **별칭(Alias)** 을 정의합니다. 이 별칭을 SSH 명령어에 사용하게 됩니다. 별칭 대신 실제 호스트 주소(IP 또는 도메인)를 직접 넣을 수도 있습니다. 와일드카드 문자(`*`, `?`)도 사용할 수 있습니다. * **들여쓰기**: `Host` 아래의 옵션들은 **들여쓰기**를 해야 합니다. 공백이나 탭을 사용해도 되지만, 일관성을 유지하는 것이 좋습니다. * **옵션**: `Host` 아래에는 해당 별칭으로 접속할 때 적용될 다양한 SSH 옵션들을 나열합니다. 이 옵션들은 이전에 `ssh -옵션` 형태로 사용했던 것들과 동일합니다. ### 자주 사용되는 옵션들 {#sec-488803d47bdf} | | | | | --- | --- | --- | | **옵션** | **설명** | **예시 값** | | `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 파일 작성 예시 {#sec-92c9daf3ee29} 자주 접속하는 몇 가지 서버에 대한 설정을 `~/.ssh/config` 파일에 추가해 봅시다. ```ini # 첫 번째 서버: 웹 서버 (별칭: 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-prod`나 `aws-dev`로 접속하면 `User`와 `IdentityFile` 설정이 자동으로 적용됩니다. `HostName`은 `aws-prod`로 접속 시 `prod`가 됩니다 (나중에 `ssh aws-prod` 명령어로 사용). * `10.0.0.*`: `10.0.0.x` 형태의 IP 주소에 접속할 때 자동으로 `admin` 사용자 및 기본 22번 포트가 적용됩니다. > 사실, 위의 예시에 `*` 와일드카드방식을 일단 소개는 했지만, 실제로 저는 거의 저런 방식을 사용하진 않습니다. 그냥 서버하나에 설정하나 1:1로 매핑하는게 관리하기도 쉽습니다.
> **같은 서버를 다른 설정으로 접근하는 경우도 있기 때문에** 그럴때마다 설정 하나씩 추가해놓고, 마치 레스토랑에서 메뉴판 보고 음식 고르듯이 별칭을 골라서 `ssh my-alias` 이런 식으로 주문만 하면 되도록 구성합니다. --- ![SSH 접속 버튼을 누르자 네트워크로 퍼지는 마법 같은 이미지](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## Config 파일 사용 방법 {#sec-e176d1ccdfce} 이제 Config 파일에 설정을 저장했다면, 실제 접속은 훨씬 간단해집니다. 위 예시를 바탕으로 해볼까요? ### 1. 별칭으로 접속하기 {#sec-b0810f8f4908} 별칭만 사용하여 SSH 접속 명령어를 실행합니다. * **`webserver` 별칭 사용:** ```bash 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` 별칭 사용:** ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` >(동시에 로컬 8000번 포트로 접속하면 dev.example.com의 80번 포트로 연결됨) --- ## Config 파일 사용의 장점 {#sec-2c234f7e8725} * **편의성:** 길고 복잡한 SSH 명령어를 짧은 별칭으로 대체하여 입력 오류를 줄이고 시간을 절약할 수 있습니다. * **생산성:** 자주 접속하는 서버를 빠르게 오갈 수 있어 작업 효율이 높아집니다. * **관리 용이성:** 모든 접속 관련 설정을 한곳에서 관리할 수 있어 유지보수가 용이합니다. 예를 들어, 서버의 IP 주소가 변경되더라도 Config 파일만 수정하면 됩니다. * **보안:** 중요한 정보(예: 키 파일 경로)를 명령어 히스토리에 남기지 않아도 됩니다. --- ## 마치며 {#sec-9c659c3d712e} SSH Config 파일은 SSH를 사용하는 모든 개발자와 시스템 관리자에게 필수적인 도구입니다. 이 파일을 활용하여 여러분의 SSH 접속 경험을 훨씬 더 편리하고 효율적으로 만들 수 있습니다. `~/.ssh/config` 파일을 열고 여러분만의 별칭을 만들어 보세요! SSH 와 관련된 다른 포스팅도 함께 읽어보세요! 오른쪽 검색창에서 ' ssh' 를 검색하시면 ssh 와 관련한 다양한 글을 보실 수 있습니다. 궁금한 점이 있다면 언제든지 댓글로 질문해주세요!