known_hosts 트러블 슈팅
오랜만에 접속한 VM 서버에서 아래와 같이 에러 메시지를 표시하였습니다.
에러 메시지
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:ATIZY6WlpgcNCKlFnTES55h5bfbRbNoQEinnFn4w290.
Please contact your system administrator.
Add correct host key in /Users/jinhyeokhong/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /Users/jinhyeokhong/.ssh/known_hosts:183
Host key for 192.168.100.16 has changed and you have requested strict checking.
Host key verification failed.
이 에러는 SSH 클라이언트가 원격 호스트의 신원을 확인하는 과정에서 발생하였고 SSH 클라이언트는 원격 호스트의 공개 키를 사용하여 인증하고 이 키는 일반적으로 known_hosts 파일에 저장됩니다. 그러나 원격 호스트의 키가 변경되었을 경우 known_hosts 파일에 저장된 키가 일치하지 않아 발생되었습니다.
일반적으로 위 경고 메시지가 나타날 경우는 세 가지로 원격 호스트의 IP 주소가 변경
되었거나 원격 호스트의 SSH 서버 키가 변경
되었거나 중간자 공격이 발생하여 악의적인 공격자가 SSH 통신을 가로챘을 경우
입니다.
경고 메시지에서 Offending ED25519 key in /Users/jinhyeokhong/.ssh/known_hosts:183
행을 볼 수 있습니다. 이 행은 known_hosts 파일에서 문제가 발생한 호스트 키를 나타냅니다.
에러를 해결하기 위해서는 위 경고 메시지에 따라 호스트 키를 신뢰할 수 있는 것으로 간주하고 known_hosts 파일에서 해당 키를 삭제하고 변경된 클라이언트 키에 대해서 신뢰할 수 있도록 키 설정을 이어나가거나 호스트 키를 수동으로 검증하고 신뢰할 수 있는지 확인한 후, known_hosts 파일에 새로운 키를 추가하는 것입니다.
저는 여기서 첫 번째 방법을 선택하여 현재 known_hosts에 등록된 문제되는 호스트 키를 모두 삭제하고 기존 클라이언트 키를 재 등록할 것입니다.
ssh-keygen -R 192.168.100.16
...
# Host 192.168.100.16 found: line 183
Offending ED25519 key in /Users/jinhyeokhong/.ssh/known_hosts:183
위 명령은 known_hosts 파일에서 특정 호스트 키를 제거하는 역할을 합니다. 이 경우, 해당 명령을 실행하여 192.168.100.16 호스트의 키를 제거했기 때문에 호스트 키 검증 오류가 해결되었을 것입니다.
ssh-keygen -R
명령은 주어진 호스트의 모든 키를 known_hosts 파일에서 제거하고 해당 호스트와의 연결 시 다시 호스트 키를 확인하고, 변경된 키에 대한 경고가 다시 나타날 수 있습니다. 이 경우, SSH 클라이언트는 새로운 호스트 키를 수락하고 known_hosts 파일에 새로운 키를 추가합니다.
위 명령어를 실행 후 known_hosts에 192.168.100.16 아이피에 대한 키 정보가 아래와 같이 수정된 것이 확인되었고 ssh 정상 접속을 확인하였습니다.
192.168.100.16 ssh-ed25519 ...
192.168.100.16 ssh-rsa ...
192.168.100.16 ecdsa-sha2-nistp256 ...
known_hosts 파일과 authorized_keys 파일의 각 역할 및 목적에 대해서 다시 한 번 짚고 넘어가보고자 합니다.
known_hosts vs authorized_keys
known_hosts 파일과 authorized_keys 파일은 모두 SSH(Secure Shell) 프로토콜을 사용하는 시스템에서 사용되는 중요한 파일이이지만 각각 다른 목적을 가지고 있습니다.
known_hosts 파일
known_hosts 파일은 클라이언트가 SSH로 접속하는 원격 서버의 호스트 키(SSH 호스트의 공개키)를 저장하는 파일입니다. 클라이언트가 처음으로 원격 서버에 접속할 때, 서버의 공개키를 받아와서 이 파일에 저장합니다. 이후에 클라이언트가 같은 서버에 접속할 때마다 known_hosts 파일을 확인하여 서버의 공개키가 변경되지 않았는지 검사합니다. 변경이 감지되면 클라이언트는 경고를 표시하고 연결을 거부합니다. 이 파일은 보안을 강화하고 중간자 공격을 방지하기 위한 목적 으로 사용됩니다.
authorized_keys 파일
authorized_keys 파일은 원격 서버에 로그인할 때 사용자의 인증을 위해 사용되는 공개키를 저장하는 파일입니다. 클라이언트 측에서 생성된 개인키와 서버 측의 authorized_keys 파일에 저장된 공개키를 비교하여 인증을 수행합니다. 클라이언트 측의 공개키가 authorized_keys 파일에 등록되어 있어야 원격 서버에 접속할 수 있습니다. 이를 통해 비밀번호 없이 안전한 로그인을 가능하게 합니다.
요약하면, known_hosts 파일은 클라이언트 측에서 원격 서버의 호스트 키를 저장하는 데 사용되며, authorized_keys 파일은 서버 측에서 클라이언트의 공개키를 저장하는 데 사용됩니다.