ssh server key 관련 문의
안녕하세요~
관리 부실로 서버에 문제가 생겨 도움 요청드립니다.
클라이언트에서 서버로 ssh 접속하는 스크립트에서 비밀번호 입력없이 접속하게 하려고
클라이언트 .ssh/known_hosts 파일에 서버 정보를 미리 설정해 두었었습니다.
현재 서버에 문제가 생겨 새로 설치했구요. 원래 데이터는 복구하지 못했습니다.
클라이언트에서 접속 시도시 아래와 같이 출력됩니다.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ECDSA key sent by the remote host is
SHA256:qESVYiW0PJhlQ3+gA82oOmcrS8D2XSfSpp4PHB4To3o.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:1
ECDSA host key for [1.215.xxx.xxx]:22 has changed and you have requested strict checking.
Host key verification failed
서버를 새로 설치해서 생긴 문제 같은데.. 이전 서버의 데이타가 없습니다.....ㅜㅜ
클라이어트의 known_hosts 파일
$~/.ssh# cat known_hosts
[1.215.xxx.xxx]:22 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJ4DBuMSZlgF8vfV0CF2+qLaA1Ia5KwJXJUY14zx0KFCb9xqtU4XCYxMh+MpP3NvigCvsdmiPAJEkJfsMh5YzMU=
혹시 클라이언트의 known_hosts 파일의 내용으로 ssh server를 설정할 수 있을까요?
읽어 주셔서 감사합니다.
~/.ssh/config 를 만들어 다음의 설정을
client 의 ~/.ssh/config 를 만들어 다음의 설정을 넣어 주세요.
unsafe -> safe 순서대로.
unsafe -> safe 순서대로.
1. StrictHostKeyChecking no
자세한 방법은 https://kldp.org/comment/641961#comment-641961 참고.
죽었다 깨어나도 man-in-the-middle attack 따위는 있을 수 없는 상황, 예컨대...
(1) 공격자가 절대 존재할 수 없는 경우 (e.g., 접속하는 과정에서 이미 인증을 거치는 사설 네트워크)
(2) 공격받아도 잃을 게 전혀 없는 무가치 표적
뭐 이런 경우에는 복잡하게 호스트 키 같은 거 고민할 필요 없이 그냥 꺼 버리면 됩니다.
2. Man-in-black
클라이언트의 known_hosts 파일에서 [1.215.xxx.xxx]:22를 포함하는 줄을 찾아서 다 지워버립니다.
그 뒤 다시 접속 시도하면 ssh이 "처음 보는 호스트인데 호스트 키 등록할까요?" 하고 물어볼 겁니다. y 하면 됩니다.
보통 linux + ssh 입문자들에게 "처음 접속할 땐 이렇게 막 뭐라뭐라 뜨는데 그냥 예 눌러" 이렇게 가르치곤 하는데, 딱 그 수준의 보안입니다.
처음 한 번을 확실히 믿어줄 수 있다면, 그 뒤에 누군가 man-in-the-middle attack을 시도하면 탐지할 수 있습니다.
다만 그 처음 한 번이 문제.
3. 돌 다리도 두드려 가면서...
(1) 새로 세팅한 서버에서 아래 명령어를 실행하여 host key fingerprint를 출력합니다.
(2) 클라이언트에서 해당 서버의 pubkey를 스캔하여 임시로 파일에 출력합니다.
(3) 클라이언트에서 획득한 서버 pubkey의 fingerprint를 출력합니다.
(4) 이 과정이 제일 중요합니다. (1)에서 출력한 결과와 (3)에서 출력한 결과가 같아야 합니다.
(1)은 서버에서 출력한 것이고 (3)은 클라이언트에서 출력한 것이죠.
직접 두 컴퓨터를 확인할 수 있으면 가장 좋고, 그렇지 못하다면 신뢰할 수 있는 사람을 보내서 신뢰할 수 있는 통신수단을 거쳐 결과를 비교해야 합니다.
만약 두 결과가 동일하지 않다면, 클라이언트는 잘못된 (누군가 위조했을 수 있는) 호스트 키를 받고 있는 겁니다.
(5) 두 결과가 동일하다면 만사형통입니다.
known_hosts에서 기존 키를 지우고, server_pubkey의 내용을 덧붙이세요. 끝.
댓글 달기