起因
把服務器上的一個虛擬機搞壞了,所以刪除重新創建了一個,端口號和IP與之前的虛擬機相同。
ssh username@IP -p port 時報錯
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 XXXXX key sent by the remote host is
XXXXX.
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:13remove with:ssh-keygen -f "/root/.ssh/known_hosts" -R "[IP]:port"
Host key for [IP]:port has changed and you have requested strict checking.
Host key verification failed.
lost connection
原因
開始看到這個錯誤以為是公鑰私鑰不對應,但我并沒有生成過公私鑰,感到很奇怪。之后才弄明白:因為之前連接過相同IP和端口的虛擬機,所以電腦會把連接過的虛擬機的公鑰保存到C:\Users\user_name\.ssh\known_hosts
中,在ssh連接的時候會驗證里面存儲的公鑰和目標虛擬器的公鑰是否一致,不一致就會報上面的錯。
解決
windows上把"C:\Users\user_name\.ssh\known_hosts"
里有關舊的虛擬機的信息刪除即可
linux可以使用以下命令ssh-keygen -f "/root/.ssh/known_hosts" -R "[IP]:port"
,如果執行這個命令卡住了,如下圖:
說明有進程在在占用這個文件,把vs_code等的編輯器關掉,在終端執行上述命令即可