~/.ssh/config는 원격 주소록이야
설정이 없으면 호스트, 사용자, 포트, 키 경로를 매번 입력해야 해. ~/.ssh/config는 ssh -i ~/.ssh/work_id -p 2222 alice@server.example.com을 ssh work로 줄여 줘. scp, rsync처럼 내부에서 ssh를 쓰는 도구도 같은 별칭을 이용해.
기본 형식
Host work
HostName server.example.com
User alice
Port 2222
IdentityFile ~/.ssh/work_id_ed25519
IdentitiesOnly yes
Host *.internal
User root
ProxyJump bastion.internalHost에는 접속할 때 쓰는 별칭이나 패턴을 적고 그 아래 지시문을 들여써. OpenSSH는 많은 항목에서 먼저 얻은 값을 사용하므로 구체적인 블록을 넓은 기본값보다 앞에 둬.
자주 쓰는 지시문
IdentityFile ~/.ssh/foo: 사용할 개인 키를 정해.IdentitiesOnly yes: 지정한 키만 시도해.ProxyJump bastion: 점프 호스트를 거쳐 접속해.ForwardAgent yes: 로컬 에이전트를 전달하므로 필요한 신뢰 경로에만 써.LocalForward 5900 localhost:5900: 접속하면서 로컬 터널을 열어.ControlMaster auto와ControlPath ~/.ssh/cm-%r@%h:%p: 여러 명령이 연결을 공유하게 해.
권한이 너무 넓으면 거부될 수 있어
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519개인 키와 설정 파일은 다른 사용자가 읽지 못하게 제한해야 해. 다만 chmod 600 ~/.ssh/*처럼 모든 항목을 한꺼번에 바꾸면 하위 디렉터리와 공개 키까지 잘못 건드릴 수 있어. 실제 파일 종류를 확인한 뒤 정확한 대상만 바꿔.
적용값과 연결 과정을 확인하기
ssh -G host는 합쳐진 설정을 보여 주고, ssh -v host는 연결 과정을 자세히 보여 줘. ssh -T host는 의사 터미널 할당을 끄지만 인증만 시험하는 전용 모드는 아니야. 원격 명령을 허용하는 대상이라면 ssh -v -o BatchMode=yes host true처럼 부작용 없는 명령으로 확인해.
SSH 설정은 먼저 정해진 값이 우선해
눈으로 한 블록만 읽으면 Host * 같은 다른 패턴에서 들어온 값을 놓칠 수 있어. 구체적인 Host 블록을 먼저 두고 ssh -G alias의 최종 출력을 확인해. 상세 로그에는 호스트와 사용자 정보가 담길 수 있으니 공유하기 전에 지워.
에이전트 전달은 키 복사가 아니야
원격 호스트가 개인 키 파일을 읽는 것은 아니지만 연결 중에는 로컬 에이전트에 서명을 요청할 수 있어. 신뢰하는 점프 호스트가 실제로 필요로 할 때만 켜고 넓은 기본값으로 두지 마.