问题

问题

为什么我在尝试连接服务器 B 时在服务器 A 上收到此错误????

ssh [email protected]
Warning: the ECDSA host key for 'zk.111.sf.development.cloudera.fu.com' differs from the key for the IP address '107.170.xxx.xxx'
Offending key for IP in /root/.ssh/known_hosts:4
Matching host key in /root/.ssh/known_hosts:5
Are you sure you want to continue connecting (yes/no)? no
Host key verification failed.
enter code here

在服务器 AI 上执行此操作

eval `ssh-agent -s`
ssh-keyscan 107.170.xxx.xxx | tee -a /root/.ssh/known_hosts

然后我尝试 ssh。哇...两个服务器甚至有相同的公钥和私钥。我正在尝试在服务器之间设置无密码身份验证。

答案1

看起来您的某些主机最近更改了 IP,并且您在 IP 更改之后和之前连接到了它们。

我建议您清理第 4 行和第 5 行中的 known_hosts 文件以摆脱此错误消息。

另一件需要考虑的事情是:如果您只希望服务器 A 连接到服务器 B,那么您只需要将服务器 A 的公钥(id_dsa.pub 或 id_rsa.pub 的内容)放入服务器 B 的 /root/.ssh/authorized_keys 中。

如果您确实想要双向连接,您应该对服务器 B 到 A 执行相同的步骤。

答案2

从 ssh_config(5) 手册页中,有一个 PATTERNS

检查主机IP

如果此标志设置为“yes”,ssh(1) 将另外检查 known_hosts 文件中的主机 IP 地址。这允许 ssh 检测主机密钥是否由于 DNS 欺骗而更改。如果选项设置为“no”,则不会执行检查。默认值为“yes”。

所以你可以把CheckHostIP 没有在您的 /etc/ssh/ssh_config 文件中。


正如@Vinícius Ferrão 所说,它并不安全。最好的想法是CheckHostIP 没有在您的 ~/.ssh/config 文件中。这里有一个示例:

Host bar.local bar
    Hostname bar.local
    CheckHostIP no

您应该在 A 和 Bi 上执行相同的操作,并认为对启用 DHCP 的网络来说这是最好的主意。

答案3

问题

此问题是由于在两个不同的服务器上使用相同的公钥/私钥对而导致的。每台服务器都需要一个唯一的公钥/私钥对。

背景

您通过 SSH 连接到的每台服务器的指纹都会被记录下来,~/.ssh/known_hosts这样当您连接到任何您之前连接过的服务器时,就可以避免 MITM 攻击。当您连接到两台具有相同公钥的不同服务器,或者连接到一台与您~/.ssh/known_hosts文件中的公钥不同的服务器时,SSH 会警告您出现了问题,并且不会让您连接(默认情况下)。无需禁用此安全警告。

解决方案

  1. 为两个服务器中的至少一个生成新的公钥/私钥对。如果您只打算重新生成一个,请选择通过网络复制的密钥对。精确方法取决于你的操作系统,但是如果你使用的是 Linux,命令可能如下所示:

    sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
    sudo ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
    
  2. 您需要从~/.ssh/known_hosts文件中删除所有过时的指纹。请不要删除所有~/.ssh/known_hosts文件。这是简单的解决方法,但会让您容易受到 MITM 攻击。该文件很容易读取。每行代表一个主机。找到两个包含服务器 IP 地址的文件并删除它们。

前进

您提到您正在尝试在服务器之间设置无密码身份验证,因此您需要为用户它将连接到另一台服务器。

  1. 在其中一个服务器的终端中,切换到将启动此连接的用户帐户。这可能不应该root,但这取决于你。你可以使用要切换到的用户名来su - user执行此操作。user

  2. 现在使用 生成密钥对ssh-keygen -t rsa。不要指定密码,否则每次使用时都必须输入密码,这完全违背了你所做的一切。如果你愿意并且知道自己在做什么,你也可以自定义命令。此步骤需要一点时间,它会在此过程中打印出公钥的线条图。我不知道如果已经生成密钥会发生什么,所以有可能会出现错误。不用担心。只需继续下一步即可。

  3. 复制此用户的将公钥复制到另一台服务器上的用户帐户。有一个命令可以做到这一点,即ssh-copy-id user@host。您将需要使用远程帐户的密码,否则复制将无法通过。

  4. 立即地通过执行 测试密钥是否正确安装ssh user@host。现在用户可以作为另一台服务器的远程用户登录,而无需密码。如果此操作有效,请在交换服务器的情况下重复此过程。

答案4

我遇到了同样的问题

.ssh/已知主机:4 .ssh/已知主机:5

我删除了known_hosts文件中的所有文本,保存并重新打开了一个新的终端会话ssh,我的问题就解决了。

相关内容