원인
SSH 로 서버에 접근을 최초로 하게 되면
서버의 Public key를 바탕으로 클라이언트에 Private key가 생성됩니다 (=fingerprint)
연결을 신뢰한다면 fingerprint가 생성되고, 다음 ssh 접속 때 호스트 검증용으로 쓰입니다
다음 SSH 접속 때 client의 private key와 서버의 public key를 비교하여 일치하는 지 확인합니다
putty를 써보신 분들은 이에 익숙할 것 같습니다
https://www.cosc.brocku.ca/archive/help/software/putty
Configure PuTTY | Computer Science
Configure PuTTY PuTTY is a graphical SSH client which allows you to make shell connections to network servers such as Sandcastle. For connecting the Sandcastle you must enter the hostname which is sandcastle.cosc.brocku.ca you can enter a Session name and
www.cosc.brocku.ca
두 키가 서로 일치하지 않는다면,
host key verification failed warning이 나오는 것입니다.
이는 단순히 서버의 public key가 변경되어 키가 일치하지 않을 수도 있고
IP 스푸핑에 의해 해커의 서버에 연결될 수도 있습니다.
(해커의 서버에는 private key와 매핑되는 public key를 가질 수 없습니다)
즉, host key verification failed 의 뜻은,
지금 당신이 접속하려는 서버는 당신이 생각하는 서버가 아닐 수도 있다는 경고입니다
해결책
1. 키를 새로 만든다
기존의 키가 없어지고 새로운 키로 대체됩니다
key를 통한 인증을 할 때는 생성된 새로운 private key를 써야합니다
ssh-keygen -R [IP_ADDRESS]
2. 경고를 무시하는 옵션을 준다
(내가 생각하는 서버가 아닐 수도 있지만 접속하겠다)
scp -o StrictHostKeyChecking=no samplefile \
root@[IP_ADDRESS]:/sample/path
서버가 재기동되면 Key가 변경되는 경우가 있습니다 (클라우드 환경이라 그랬던 것 같고 정확한 이유는 모르겠음)
따라서, Jenkins에서 scp를 쓸 때 strictHostKeyChecking=no 옵션을 줄 수 있습니다
'개발업무 > 인프라' 카테고리의 다른 글
nslookup -debug (0) | 2023.10.31 |
---|---|
https SSL 인증서 작동 원리 (0) | 2022.11.13 |
MYSQL : Master Slave replication (1) | 2022.11.11 |
NAT : Network Address Translation (1) | 2022.11.08 |
DNS name server IP 확인하는 법 (1) | 2022.11.07 |