刚刚想重新传输一下ssh-keygen
生成的公钥到服务器上,但运行SCP命令时却提示“Host key verification failed.”,如下图:
> scp C:\Users\xxx\.ssh\id_rsa.pub root@xxx.xxx.xxx.xxx:/home
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ED25519 key sent by the remote host is
SHA256:OP9ihTmia4xa3X2x+9QmnHLN6wdU1bss3Er2FgdI.
Please contact your system administrator.
Add correct host key in C:\\Users\\xxx/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\xxx/.ssh/known_hosts:10
Host key for xxx.xxx.xxx.xxx has changed and you have requested strict checking.
Host key verification failed.
SCP本质上就是通过SSH连接然后再复制问及那。而OpenSSH会把每个访问过的计算机公钥(public key)都记录在~/.ssh/known_hosts
中。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。
之所以在我这里会出现这种情况,是因为服务器的系统重新安装之后,原本的公钥发生了变化。
解决方法一就是打开~/.ssh/known_hosts
文件,然后删除对应ip的相关内容,重新执行命令会要求输入密码,然后连接成功并完成复制。
解决方法二则是运行以下命令:
ssh-keygen -R xxx.xxx.xxx.xxx (服务器ip地址)
该命令是清除当前机器里关于远程服务器的缓存和公钥信息,注意是大写的字母“R”。运行后重新执行SCP命令,同样要求输入密码并完成任务。