핑은 되는데 VPN을 거친 SSH가 실패한다: 어느 단계가 깨졌나?
상세한 시도 하나면 TCP 도달성, SSH 전송, 호스트 신원, 사용자 로그인, 세션 권한을 분리할 수 있어 터널을 두고 추측하는 일을 멈출 수 있다.
핑 응답과 거부된 SSH 로그인은 동시에 참일 수 있으며, 그 조합이 터널을 의심할 근거는 아니다. 에코 응답과 포트 22로의 TCP 연결은 선택자도 정책도 다르고 목적지도 종종 다른 별개의 시험이다. 의도한 SSH 시도를 한 번 기록하고, 마지막으로 도달한 단계를 이름 붙여라. 그 증거 하나가 수십 개의 추측성 설정 변경을 대신한다.
한 번의 시도를 기록하라, 여러 번 찌르는 세션이 아니라
클라이언트를 상세 진단, 연결 공유 비활성화, 연결 제한 시간 설정과 함께 한 번만 실행하라. 공유를 끄는 것이 중요한 이유는, 이전에 인증된 마스터 연결이 아니면 새 시도를 대신 처리해 추적 중인 장애를 숨기기 때문이다.
ssh -4 -vv -o ControlPath=none -o ConnectTimeout=10 [email protected]
목적지, 주소 패밀리, 타임스탬프, 마지막 비밀 아닌 오류를 남겨라. IPv4 플래그는 이 시도가 같은 이름으로 가는 IPv6 경로에 대해 아무 말도 하지 않는다는 뜻이기도 하므로, 그것으로 일반화하지 마라. 시도를 어디서 했는지도 기록하라. VPN 게이트웨이에서 한 점검은 그 뒤의 노트북과 같은 관점이 아니며, 이런 티켓의 모순 대부분은 둘을 섞는 데서 나온다.
첫 번째와 두 번째 단계: SSH보다 먼저 TCP
첫 경계는 소켓의 도달성이다. 주소, 포트, 그리고 패킷이 실제로 지나는 경로다. TCP 연결이 끝까지 되지 않으면 그 위에는 아직 아무것도 없고, 호스트 키와 계정은 무관하다.
nc -vz 10.90.4.20 22
ip route get 10.90.4.20
tcpdump -ni any 'host 10.90.4.20 and port 22'
기록을 클라이언트 시도와 연결하라. SYN이 나가고 아무것도 돌아오지 않으면 필터링, 선택자, 또는 먼 쪽의 경로 누락을 가리킨다. 재설정이 담긴 응답은 버리는 대신 적극적으로 거부하는 무언가를 가리킨다. 두 번째 경계는 SSH 프로토콜 교환 자체다. 완료된 뒤 멈춰 있는 TCP 연결은 도달성을 지나 협상, 서버 응답, 패킷 처리로 들어간 것이다. 그것은 다른 조사이며, 크기 관련 문제가 처음으로 그럴듯해지는 지점이다.
세 번째 단계: 누구의 키가 응답했나
전송이 올라오면 클라이언트는 서버의 호스트 키를 검증한다. 여기서의 거부는 암호가 아니라 신원에 대한 진술이다. 상대가 정책이 수용하지 않는 키를 제시한 것이다. 이를 정지 조건으로 다루고, 콘솔이나 호스트를 다시 만든 운영자를 통해 대역 밖에서 검증하라. 경고를 없애려고 기억된 항목을 삭제하는 것은 유일하게 거부해야 할 지름길이다. 예상치 못한 무언가가 응답했다는 증거를 파괴하기 때문이다.
호스트가 정말로 다시 만들어졌다면 새 지문이 확인된 뒤에만 오래된 기록을 지우고, 날짜와 이유를 적어 두라. 다음 엔지니어도 같은 경고를 만나며 그 맥락이 필요하다.
네 번째와 다섯 번째 단계: 계정 대 권한
인증은 네 번째 경계다. 자격 증명이 거부되었다면 서버가 시도를 평가해 거부한 것이다. VPN 비밀번호가 아니라 계정, 서버가 받아들이는 자격 증명 유형, 서버 자체의 정책을 확인하라. 다섯 번째 경계는 로그인 성공 이후의 인가다. 인증된 사용자도 셸, 명령, 하위 시스템, 전달을 거부당할 수 있고, 클라이언트의 마지막 줄만 읽는 사람에게 그 거부는 장애처럼 보인다.
| Last stage reached | What it proves | Where to look next |
|---|---|---|
| No TCP connection | No SSH transport exists | Address, port, route, selectors, filter, listener |
| TCP up, exchange incomplete | Reachability is not the blocker | Server response, negotiation, packet handling |
| Host identity rejected | The peer is not the expected host | Independently verified host key |
| User authentication rejected | The attempt reached authentication | Account, credential and server policy |
| Authenticated, session denied | Login succeeded, the operation did not | Shell, command or forwarding permission |
비밀번호 시도가 몇 번 실패하면 멈춰라. 반복된 추측은 잠금을 만들고, 그것은 나중에 두 번째의 무관한 장애처럼 보이며 원래 티켓보다 더 많은 시간을 잡아먹는다.
롤백과 남기는 기록
한 번에 하나씩 바꾸고, 다시 시험하기 전에 무엇을 바꿨는지 적어라. 변경이 시도를 더 나쁘게 만들면 다른 수정을 위에 쌓지 말고 즉시 되돌려라. 원래 클라이언트와 맥락에서 원래 작업을 반복하라. 다른 주소 패밀리의 다른 기계에서 로그인에 성공한 것은 재현이 아니며 수정을 증명하지 않는다.
공유하는 것을 정리하라. 상세한 클라이언트 출력에는 내부 이름, 계정 레이블, 키 경로, 공개 키 식별자가 담길 수 있으므로 원시 추적 대신 단계별 결론을 공개하라.