무엇을 하나
OpenSSH 클라이언트 설정 파일 ~/.ssh/config 에 넣을 Host 블록을 만듭니다. 별칭을 정해 두면 주소 · 사용자 · 포트 · 키 · 배스천 · 포워딩을 매번 치지 않아도 됩니다. 빈칸은 블록에 넣지 않고, 확실히 읽히지 않는 값(공백 섞인 별칭, % 가 든 경로 등)은 블록을 만들지 않고 그 칸에 이유를 보입니다.
예시
| 하려는 것 | 들어가는 줄 |
|---|---|
| 포트 2222 · 키 지정 | Port 2222 · IdentityFile ~/.ssh/id_ed25519 · IdentitiesOnly yes |
| 배스천을 거쳐 내부 서버로 | ProxyJump admin@bastion.example.com:22 |
| 서버의 PostgreSQL 을 내 5433 으로 | LocalForward 5433 localhost:5432 |
| 내 개발 서버 3000 을 서버의 9000 으로 | RemoteForward 9000 localhost:3000 |
| 브라우저용 SOCKS 프록시 | DynamicForward 1080 |
| 놀고 있으면 끊기는 연결 | ServerAliveInterval 60 · ServerAliveCountMax 3 |
흔한 실수
- **
Host *를 맨 위에 두기 — ssh 는 설정마다 먼저 나온 값**을 씁니다.Host *에User root가 위에 있으면 아래 블록의User는 무시됩니다. 공통값은 파일 맨 아래에 둡니다. - 권한이 넓은 설정 파일 —
~/.ssh/config를 다른 사용자가 쓸 수 있으면 ssh 가 「Bad owner or permissions」로 거부합니다.chmod 600으로 둡니다. - 키가 많아서 거부됨 — 에이전트에 키가 여럿이면 하나씩 내다가 서버의 시도 횟수를 넘깁니다.
IdentityFile과 함께IdentitiesOnly yes를 씁니다.
어떻게 확인했나
공개 전에 OpenSSH 9.6p1 의 ssh -G -F <임시파일> <별칭>(설정을 읽어 최종 값만 찍고 접속하지 않음)으로 만든 블록 32개를 다시 읽어, 값마다 의도와 같은지 99번 맞대었습니다. 블록 뒤에 Host * 를 붙여 앞 블록이 이기는지, 비운 칸이 기본값(포트 22 · 별칭 = 주소)으로 읽히는지, 잘못된 입력을 블록으로 만들지 않는지도 봤습니다.
자주 묻는 것
설정이 제대로 읽혔는지 접속하지 않고 볼 수 있나요?
ssh -G 별칭 이 그 별칭에 적용될 최종 설정을 찍고 끝냅니다. ssh -G myserver | grep -E '^(hostname|user|port|identityfile) ' 처럼 필요한 줄만 봅니다.
ProxyJump 와 ForwardAgent 는 무엇이 다른가요?
ProxyJump 는 배스천을 터널로만 쓰고 인증은 내 컴퓨터에서 끝냅니다. ForwardAgent 는 배스천에 내 에이전트를 빌려주므로 그 서버의 관리자가 접속 중에 내 키로 다른 곳에 들어갈 수 있습니다. 거쳐 가는 용도라면 ProxyJump 를 씁니다.
입력한 값이 서버로 가나요?
아니요. 블록은 브라우저 안에서 만듭니다. 주소 · 사용자 이름 · 경로는 서버로 보내지 않고, 이 사이트가 쓰는 방문 통계와 광고에도 넘기지 않습니다. 자세한 것은 개인정보 처리 안내에 있습니다.