[SSH] REMOTE HOST IDENTIFICATION HAS CHANGED 오류 해결

smlee·2022년 8월 25일
0

에러 일지

목록 보기
14/24

❓ 문제 상황

프로젝트를 하던 도중 SSH 키가 제대로 작동하지 않아 어쩔 수 없이 EC2 인스턴스 스냅샷을 통해 백업을 해두고, 기존 인스턴스와 볼륨을 삭제하였다. 그 후 새 인스턴스를 만들어 스냅샷에서 볼륨을 생성해서 새 인스턴스에 연결하였고, 이전 인스턴스에서 사용하던 탄력적 IP 역시 새 인스턴스에 연결하였다.

그리고 새로 만든 인스턴스에 제대로 백업되었는지 확인하기 위하여 새 인스턴스 키로 ec2에 접속하려고 했으나

중간자 공격의 위험이 있다는 오류 메시지와 함께 EC2 접속이 되지 않았다. 다만, StrictHostKeyChecking=no 옵션을 주면 접속 자체는 가능했지만, 여전히 중간자 공격에 대한 경고문이 뜨는 것을 똑같았다.

중간자 공격(Man in the Middle attack)
공격자가 비밀리에 도청하거나 이동하는 트래픽을 수정하기 위해 두 당사자 사이에서 통신을 가로채거나 관찰하는 공격이다. 이는 정상적인 네트워크에 간섭을 일으키거나 공격자가 통제하는 가짜 네트워크를 생성하여 공격을 할 수 있다. MitM 공격을 이용해 로그인 자격 증명이나 개인 정보를 훔칠 수 있다. 또한, 피해자를 염탐하거나 통신을 방해 또는 데이터 파괴를 할 수 있다.

❗ 해결 방법

EC2 인스턴스를 새로 바꾸면서 새 키가 발급되었다. 그리고 새로운 인스턴스에 이전 인스턴스에서 사용하던 탄력적 IP를 연결해서 생긴 오류였다. 즉 탄력적 IP의 서버는 이전 인스턴스의 키로 생성한RSA 공유키를 공유한 상태인데, 새로운 키가 들어오니 뜨는 오류이다.

중간자 공격에 대한 경고가 뜬 것도 기존에 서버가 알고 있던 정보와 달라서 생기는 오류인 것이다.

따라서 새로운 인스턴스의 키를 서버에 등록해주고, 로컬의 known_hosts에도 서버를 등록시켜주면 된다.

(1) pem 키로 RSA 공개 키 생성

이전 키 교환 에러가 발생했을 때처럼 putty key generator를 사용하여 인스턴스 개인 키를 기반으로 공개 키를 만든다.

(2) 서버의 authorized_keys에 등록

일단은 ssh -o StrictHostKeyChecking=no -i 키파일 ubuntu@탄력적ip라는 명령어를 통해 키를 적절하게 체크하게 한 후 접속을 한다.

그 후, ~/.ssh/authorized_keys에 (1)에서 생성한 키를 등록해준다.

(3) 로컬에 인스턴스 등록

서버에서 cat /etc/ssh/ssh_host_ed25519_key.pub를 통해 서버에 등록되어 있는 퍼블릭 키를 모두 복사한 후, 로컬에 있는 ~/.ssh/known_hosts에 등록한다.

이때, 퍼블릭 키는

위와 같이 ssh-ed25519 키 root-내부ip 형태인데, ~/.ssh/known_hosts에 등록할 때는 탄력적IP ssh-ed25519 키 형태로 등록을 해야한다.

(4) 접속 완료

이제 ssh -i 키파일 ubuntu@탄력적IP를 통해 접속을 시도하면

StrictHostKeyChecking=no 옵션이 없어도 제대로 접속이 되는 것을 확인할 수 있다.

0개의 댓글