설명
SSH 또는 Secure Shell은 일반적으로 명령줄을 통해 원격 시스템에 안전하게 액세스하는 매우 일반적인 방법입니다. 이는 연결, 따라서 전달되는 모든 데이터가 도청되지 않도록 하는 것을 목표로 합니다.
이 때문에 OpenSSH와 같은 인기 있는 SSH 클라이언트에는 연결이 손상되지 않도록 하는 몇 가지 검사가 내장되어 있습니다.
이러한 검사 중 하나의 예는 서버의 지문이 변경된 시기를 식별하는 다음과 같습니다.
$ ssh
[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 경고: 원격 호스트 식별이 변경되었습니다! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
누군가가 불쾌한 일을 하고 있을 가능성이 있습니다!
누군가가 지금 당신을 도청하고 있을 수 있습니다(중간자 공격)!
호스트 키가 방금 변경되었을 수도 있습니다.
원격 호스트에서 보낸 ECDSA 키의 지문은 다음과 같습니다.
SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I.
시스템 관리자에게 문의하십시오.
이 메시지를 제거하려면 /Users/scott/.ssh/known_hosts에 올바른 호스트 키를 추가하십시오.
/Users/scott/.ssh/known_hosts:47의 잘못된 ECDSA 키
ec2-192-168-1-1.compute-1.amazonaws.com에 대한 ECDSA 호스트 키가 변경되었으며 엄격한 확인을 요청하셨습니다.
호스트 키 확인에 실패했습니다.
SSH를 통해 서버에 연결하면 ECDSA 키에 대한 지문을 가져와서 ~/.ssh/known_hosts 아래의 홈 디렉토리에 저장합니다. 이것은 서버에 처음 연결한 후에 수행되며 다음과 같은 메시지가 표시됩니다.
$ ssh
[email protected]호스트 'ec2-192-168-1-1.compute-1.amazonaws.com(192.168.1.1)'의 인증을 설정할 수 없습니다.
ECDSA 키 지문은 SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I입니다.
계속 연결하시겠습니까(예/아니요)?
'yes'를 입력하면 지문이 known_hosts 파일에 저장되고 SSH는 해당 서버에 연결할 때마다 이 파일을 참조합니다.
그러나 서버에 마지막으로 연결한 후 서버의 ECDSA 키가 변경된 경우에는 어떻게 됩니까? 이는 실제로 알지 못하는 사이에 다른 서버에 연결하고 있음을 의미할 수 있기 때문에 놀라운 일입니다. 이 새 서버가 악의적인 경우 연결에서 주고받는 모든 데이터를 볼 수 있으며 서버를 설정한 사람이 사용할 수 있습니다. 이를 중간자 공격이라고 합니다. 이 시나리오는 바로
"경고: 원격 호스트 식별이 변경되었습니다!" 메시지가 경고하려고 합니다.
물론 항상 그런 것은 아니며 ECDSA 키 지문이 서버에 대해 변경되는 데에는 여러 가지 이유가 있습니다. 제 경우에는 AWS에 탄력적 IP 주소가 있었고 애플리케이션을 재배포한 후 이를 다른 서버에 할당했습니다. 내가 연결한 IP 주소와 호스트 이름은 동일했지만 기본 서버가 다르기 때문에 SSH 클라이언트에서 이 경고가 발생했습니다.
문제 해결
이것이 예상된 동작이고 잠재적인 보안 문제가 없다고 100% 확신하는 경우 계속하기 전에 문제를 수정해야 합니다.
이 문제를 해결하기 위해 찾은 가장 쉬운 방법은 다음 두 가지 솔루션입니다.
known_hosts를 통해 수동으로 해결
* 경고 메시지에서 문제가 되는 ECDSA 키가 known_hosts 파일에 있는 위치를 알려주는 줄을 찾습니다. 내 예에서 이 줄은 "ECDSA 키 입력을 위반했습니다.
/Users/scott/.ssh/known_hosts:47", 이는 47행을 참조합니다.
* 경고 메시지에 지정된 known_hosts 파일 열기
* 경고 메시지에 지정된 줄 삭제
이 줄을 삭제하면 SSH 클라이언트에 비교할 ECDSA 키 지문이 없으므로 다음에 연결할 때 서버의 신뢰성을 확인하도록 다시 요청합니다. 완료되면 이 서버에 대한 known_hosts 파일에 새 지문이 생성되고 경고가 사라집니다.
ssh-keygen을 사용하여 해결
또 다른 솔루션은 ssh-keygen 유틸리티를 사용하여 known_hosts 파일에서 문제가 되는 키를 삭제하는 것입니다. 이 작업은 다음 명령으로 수행할 수 있습니다.
$ ssh-keygen -R [호스트 이름 또는 IP]
따라서 내 예에서는 다음과 같이 사용합니다.
$ ssh-keygen -R ec2-192-168-1-1.compute-1.amazonaws.com
이 방법은 known_hosts 파일을 수동으로 변경하지 않으려는 경우에 유용하며 수정할 호스트 이름과 IP 주소가 여러 개인 경우 유틸리티를 사용하는 것이 더 쉽습니다. 또한 known_hosts.old 파일에서 해시된 호스트 이름을 처리할 수 있습니다.