通过 SSH 连接时出现“远程主机标识已更改”警告

myu*_*uf3 25 server ssh

我今天在尝试登录我的服务器时收到此消息。我该怎么办?这是怎么回事?

$ ssh 10.10.10.69
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
3d:1b:02:9e:b2:b8:f0:f7:c6:4f:94:96:f6:e3:c0:d1.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:8
RSA host key for 10.10.10.69 has changed and you have requested strict checking.Host key verification failed.
Run Code Online (Sandbox Code Playgroud)

Isa*_*iah 15

您最近是否在服务器上重新安装了操作系统或类似的东西?那会导致这个。

要解决此问题:http : //www.cyberciti.biz/faq/warning-remote-host-identification-has-changed-error-and-solution/

解决方案 #1:使用 ssh-keygen 删除密钥

使用该-R选项从 known_hosts 文件中删除属于主机名的所有密钥。此选项可用于删除散列主机。如果您的远程主机名是 server.example.com,请输入:

$ ssh-keygen -R {server.name.com}
$ ssh-keygen -R {ssh.server.ip.address}
$ ssh-keygen -R {ssh.server.ip.address} -f {/path/to/known_hosts}
$ ssh-keygen -R server.example.com
Run Code Online (Sandbox Code Playgroud)

现在,您可以毫无问题地连接到主机。

解决方案#2:添加正确的主机密钥 /home/user/.ssh/known_hosts

不必删除整个 known_hosts 文件,只需删除该文件中的违规行即可。例如,如果您有 3 个服务器,如下所示。

myserver1.com,64.2.5.111 ssh-rsa  
 AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0EnGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0E
nGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94H+uv304/ZDz6xZb9ZWsdm+264qReImZzruAKxnwTo4dcHkgKXKHeefnBKyEvvp/2ExMV9WT5DVe1viVw
    k=
    myserver2.com,125.1.12.5 ssh-rsa
 AAAAB3NzaC1yc2EAAAABIwAAAQEAtDiERucsZzJGx/1kUNIOYhJbczbZHN2Z1gCnTjvO/0mO2R6KiQUP4hOdLppIUc9GNvlp1kGc3w7B9tREH6kghXFiBjrIn6VzUO4uwrnsMbnAnscD5EktgI7fG4ZcNUP 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGxQz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/IyI4NxHhhpltYZKW/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBf
    w=
    myserver3.com,125.2.1.15 ssh-rsa 
 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGx0lVkphVsvYD5hJzm0eKHv+oUXRT9v+QMIL+um/IyI4NxHhhpltYZKW
 as3533dka//sd33433////44632Z6MGnAazIviHBldxtGrFwvEnk82/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBfw==
Run Code Online (Sandbox Code Playgroud)

要删除第二个服务器 (myserver.com),请打开文件:

# vi +2 .ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

并点击 dd ​​命令删除行。保存并关闭文件。或使用以下

$ vi ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

现在转到第 2 行,键入以下命令

:2
Run Code Online (Sandbox Code Playgroud)

现在用 dd 删除行并退出:

dd
:wq
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 sed 命令如下删除第 44 行的违规密钥:

$ sed -i 44d ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

解决方案 3:如果您只有一台 ssh 服务器,只需删除 known_hosts 文件

$ cd
$ rm .ssh/known_hosts
$ ssh ras.mydomain.com
Run Code Online (Sandbox Code Playgroud)

再次尝试使用 ssh 连接
现在您应该能够通过 ssh 连接您的服务器:

ssh username@server-ip-here
ssh nixcraft@server1.cyberciti.biz
Run Code Online (Sandbox Code Playgroud)

接下来,您将收到一个新的提示来添加密钥,~/.ssh/known_hosts如下所示:

The authenticity of host '10.86.115.66 ()' can't be established.
ECDSA key fingerprint is 4e:10:42:39:53:85:7f:89:89:dc:89:84:8d:79:e7:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.86.115.66' (ECDSA) to the list of known hosts.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您没有更改服务器的 SSH 主机密钥,您应该_不要_替换您的主机密钥副本,因为这可能表明有人试图通过执行中间人攻击来破坏您的通信。 (9认同)

unh*_*mer 7

据我所知,所有这些答案都是关于抑制警告,而不是处理它。简而言之,警告告诉您服务器看起来不像以前那样;请参阅https://en.wikipedia.org/wiki/Man_in_the_middle_attack了解为什么这可能是危险的。

阅读man ssh,尤其是本节:

验证主机密钥

首次连接到服务器时,会向用户显示服务器公钥的指纹(除非已禁用StrictHostKeyChecking选项)。可以使用ssh-keygen(1)确定指纹:

   $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key
Run Code Online (Sandbox Code Playgroud)

为了安全起见,您(或您信任的人)应该首先在您要连接的服务器上运行此命令。它会给你一个指纹,看起来有点像问题警告中给出的指纹。当然,通常您没有这些信息,但如果您有理由怀疑某些事情发生了,运行该命令是检查服务器签名是否真的改变的方法,或者是否可能有可疑的事情发生。

  • 如果您的主机提供 sha256 指纹而不是 md5 哈希,请使用此选项。`ssh -o FingerprintHash=md5 example.org` (2认同)
  • 这是正确的答案。始终值得验证避免中间人攻击的关键。 (2认同)