Technology · 실용 가이드
SSH timeout·refused·“No route to host”? 먼저 목적지 튜플을 증명하세요
TCP가 인증 단계에 도달하지 않았다면 키를 바꾸지 마세요. hostname, 해석된 주소, address family, port, jump path를 고정하고 첫 오류와 verbose 단계를 보존한 뒤 첫 실패 hop 하나만 수정합니다.

TCP가 인증 단계에 도달하지 않았다면 키를 바꾸지 마세요. hostname, 해석된 주소, address family, port, jump path를 고정하고 첫 오류와 verbose 단계를 보존한 뒤 첫 실패 hop 하나만 수정합니다.
ssh -G는 Host와 Match 규칙을 평가한 뒤 client 설정을 출력합니다. ConnectTimeout은 TCP 연결과 초기 SSH handshake·key exchange 모두에 적용됩니다.
1. 실제 목적지 튜플을 고정하세요
정확한 명령을 저장하고 ssh -G target으로 hostname, user, port, address family, ProxyJump/ProxyCommand, config file, CLI override를 기록합니다. 공유할 때 credential과 private host는 가리되 내부 매핑은 보존합니다.
alias가 port 22나 입력한 hostname이라고 가정하지 마세요. Match, Include, -p, IPv4/IPv6 선택, jump host가 실제 튜플을 바꿉니다. automation이 container, runner, service account라면 성공한 laptop 대신 그 환경을 기록합니다.
2. 첫 실패와 정확한 단계를 보존하세요
시간 제한을 둔 ssh -vvv를 한 번 실행해 첫 결정적 줄, 경과 시간, 마지막 완료 단계를 보존합니다. DNS, local route, TCP refused, TCP timeout, banner/KEX timeout, host-key 검증, 인증 실패를 분리합니다.
refused는 시도한 튜플이 active failure를 받은 증거이며 흔히 listener 부재나 policy reject입니다. timeout은 제때 완료되지 않았다는 뜻뿐 어느 firewall, NAT, host, handshake가 침묵했는지는 단독으로 증명하지 않습니다. No route는 키가 아니라 route/reachability 결과입니다.
3. 이름·주소군·경로를 증명하세요
실패 환경에서 hostname을 해석하고 모든 IPv4/IPv6 주소를 나열합니다. ssh -vvv가 실제 시도한 주소, source interface, route decision을 기록합니다. -4/-6은 분류용 제어 시험이지 영구 수정이 아닙니다.
ProxyJump/ProxyCommand가 켜졌다면 client→jump, jump→destination으로 나눕니다. direct path나 laptop 성공은 CI runner, VPN, cloud subnet 경로를 증명하지 않습니다. split DNS, NAT, hairpin 차이도 남깁니다.
4. 같은 source에서 첫 TCP 경계를 시험하세요
같은 source identity에서 허가된 destination/port만 bounded TCP probe로 확인합니다. destination 또는 승인된 관리 채널에서 listen address/port, host firewall, cloud policy, NAT target, 최근 log를 확인합니다. 테스트 통과를 위해 포트를 넓게 열지 마세요.
refused는 listener/active reject, timeout은 packet path/handshake silence, no-route는 local route·neighbor·반환 ICMP를 확인합니다. ICMP와 TCP policy가 다를 수 있으므로 ping을 만능 gate로 쓰지 않습니다.
5. 허가된 경계 하나만 바꾸고 인수하세요
alias/port, route, 범위를 좁힌 firewall/NAT rule, sshd bind address, jump host 중 한 경계만 수정합니다. out-of-band 복구를 유지하고 reload 전에 server config syntax를 검사합니다.
같은 source, hostname, family, port, jump path로 재시도합니다. 기대 banner/KEX, 올바른 host-key identity, 의도한 인증 결과와 비허가 source 차단을 함께 확인합니다. 노출이 넓어지거나 제어 경로가 깨지면 rollback합니다.
