프로젝트를 하던 도중 SSH 키가 제대로 작동하지 않아 어쩔 수 없이 EC2 인스턴스 스냅샷을 통해 백업을 해두고, 기존 인스턴스와 볼륨을 삭제하였다. 그 후 새 인스턴스를 만들어 스냅샷에서 볼륨을 생성해서 새 인스턴스에 연결하였고, 이전 인스턴스에서 사용하던 탄력적 IP 역시 새 인스턴스에 연결하였다.
그리고 새로 만든 인스턴스에 제대로 백업되었는지 확인하기 위하여 새 인스턴스 키로 ec2에 접속하려고 했으나
중간자 공격의 위험이 있다는 오류 메시지와 함께 EC2 접속이 되지 않았다. 다만, StrictHostKeyChecking=no
옵션을 주면 접속 자체는 가능했지만, 여전히 중간자 공격에 대한 경고문이 뜨는 것을 똑같았다.
❓ 중간자 공격(Man in the Middle attack)
공격자가 비밀리에 도청하거나 이동하는 트래픽을 수정하기 위해 두 당사자 사이에서 통신을 가로채거나 관찰하는 공격이다. 이는 정상적인 네트워크에 간섭을 일으키거나 공격자가 통제하는 가짜 네트워크를 생성하여 공격을 할 수 있다. MitM 공격을 이용해 로그인 자격 증명이나 개인 정보를 훔칠 수 있다. 또한, 피해자를 염탐하거나 통신을 방해 또는 데이터 파괴를 할 수 있다.
EC2 인스턴스를 새로 바꾸면서 새 키가 발급되었다. 그리고 새로운 인스턴스에 이전 인스턴스에서 사용하던 탄력적 IP를 연결해서 생긴 오류였다. 즉 탄력적 IP의 서버는 이전 인스턴스의 키로 생성한RSA 공유키를 공유한 상태인데, 새로운 키가 들어오니 뜨는 오류이다.
중간자 공격에 대한 경고가 뜬 것도 기존에 서버가 알고 있던 정보와 달라서 생기는 오류인 것이다.
따라서 새로운 인스턴스의 키를 서버에 등록해주고, 로컬의 known_hosts
에도 서버를 등록시켜주면 된다.
이전 키 교환 에러가 발생했을 때처럼 putty key generator를 사용하여 인스턴스 개인 키를 기반으로 공개 키를 만든다.
일단은 ssh -o StrictHostKeyChecking=no -i 키파일 ubuntu@탄력적ip
라는 명령어를 통해 키를 적절하게 체크하게 한 후 접속을 한다.
그 후, ~/.ssh/authorized_keys
에 (1)에서 생성한 키를 등록해준다.
서버에서 cat /etc/ssh/ssh_host_ed25519_key.pub
를 통해 서버에 등록되어 있는 퍼블릭 키를 모두 복사한 후, 로컬에 있는 ~/.ssh/known_hosts
에 등록한다.
이때, 퍼블릭 키는
위와 같이 ssh-ed25519 키 root-내부ip
형태인데, ~/.ssh/known_hosts
에 등록할 때는 탄력적IP ssh-ed25519 키
형태로 등록을 해야한다.
이제 ssh -i 키파일 ubuntu@탄력적IP
를 통해 접속을 시도하면
StrictHostKeyChecking=no
옵션이 없어도 제대로 접속이 되는 것을 확인할 수 있다.