지난 포스팅에서 `ssh` 명령어의 기본적인 사용법과 유용한 옵션들을 살펴보았습니다. 하지만 매번 복잡한 IP 주소, 사용자 이름, 포트 번호 등을 일일이 입력하는 것은 여간 번거로운 일이 아닙니다. 이럴 때 **SSH Config 파일**을 활용하면 이런 번거로움을 한 번에 해결할 수 있습니다. 마치 즐겨찾기처럼 자주 사용하는 서버 접속 정보를 저장해두고 **별칭(Alias)** 으로 손쉽게 접속할 수 있도록 도와주는 마법의 파일이죠. ![SSH config를 즐겨찾기처럼 사용하는 개발자 일러스트](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## SSH Config 파일은 무엇인가요? {#sec-481141e7802b} **SSH Config 파일**은 SSH 클라이언트의 동작 방식을 사용자 정의하는 설정 파일입니다. 이 파일에 특정 호스트에 대한 접속 정보(사용자 이름, 포트, 사용할 키 파일 등)를 미리 저장해두면, 나중에 접속할 때 짧은 별칭만으로 접속이 가능해집니다. * **위치:** 일반적으로 사용자 홈 디렉토리의 `.ssh` 폴더 안에 `config`라는 이름으로 존재합니다. + 예시: `~/.ssh/config` * **파일 생성:** 만약 `~/.ssh/config` 파일이 없다면, 직접 생성해 주면 됩니다. `bash touch ~/.ssh/config chmod 600 ~/.ssh/config # 보안을 위해 읽기/쓰기 권한을 소유자에게만 부여` --- ## Config 파일 작성 규칙 {#sec-a6ba2fff88f5} Config 파일은 간단한 텍스트 파일이며, 각 호스트에 대한 설정은 `Host` 키워드로 시작하여 블록 형태로 작성됩니다. #### 기본 구조 ``` 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번 포트가 적용됩니다. --- ![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번 포트로 연결됨) * **`aws-prod` (와일드카드 별칭) 사용:** ```bash ssh aws-prod Enter passphrase for key '/home/youruser/.ssh/aws_ec2_key.pem': ec2-user@aws-prod-hostname:~ $ ``` **주의:** `aws-prod`처럼 호스트 이름을 별도로 지정하지 않은 와일드카드 `Host`의 경우, `HostName` 옵션을 명시적으로 지정해 주거나, 명령줄에서 호스트 이름을 제공해야 할 수 있습니다. 위 `aws-*` 예시에서는 `HostName`을 지정하지 않았으므로, 실제로 `ssh aws-prod`를 실행하면 SSH 클라이언트가 `prod`를 호스트 이름으로 해석하려 할 것입니다. 좀 더 명확하게 사용하려면 `Host prod-server`와 같이 별칭과 `HostName prod.example.com`을 매핑하는 것이 일반적입니다. --- ## Config 파일 사용의 장점 {#sec-2c234f7e8725} * **편의성:** 길고 복잡한 SSH 명령어를 짧은 별칭으로 대체하여 입력 오류를 줄이고 시간을 절약할 수 있습니다. * **생산성:** 자주 접속하는 서버를 빠르게 오갈 수 있어 작업 효율이 높아집니다. * **관리 용이성:** 모든 접속 관련 설정을 한곳에서 관리할 수 있어 유지보수가 용이합니다. 예를 들어, 서버의 IP 주소가 변경되더라도 Config 파일만 수정하면 됩니다. * **보안:** 중요한 정보(예: 키 파일 경로)를 명령어 히스토리에 남기지 않아도 됩니다. --- ## 마치며 {#sec-9c659c3d712e} SSH Config 파일은 SSH를 사용하는 모든 개발자와 시스템 관리자에게 필수적인 도구입니다. 이 파일을 활용하여 여러분의 SSH 접속 경험을 훨씬 더 편리하고 효율적으로 만들 수 있습니다. `~/.ssh/config` 파일을 열고 여러분만의 별칭을 만들어 보세요! SSH 와 관련된 다른 포스팅도 함께 읽어보세요! 오른쪽 검색창에서 ' ssh' 를 검색하시면 ssh 와 관련한 다양한 글을 보실 수 있습니다. 궁금한 점이 있다면 언제든지 댓글로 질문해주세요!