ssh:无法建立主机“主机名”的真实性

问题描述 投票:140回答:14

当我ssh到一台机器时,有时我会收到此错误警告,并提示说“是”或“否”。从自动ssh到其他计算机的脚本运行时,这会导致一些问题。

警告信息:

The authenticity of host '<host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

有没有办法自动说“是”或忽略这个?

ssh ssh-keys fingerprint rsa-key-fingerprint
14个回答
116
投票

根据您的ssh客户端,您可以在命令行上将StrictHostKeyChecking选项设置为no,和/或将密钥发送到null known_hosts文件。您还可以在配置文件中为所有主机或给定的IP地址或主机名设置这些选项。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

编辑

正如@IanDunn所指出的,这样做存在安全隐患。如果您连接的资源已被攻击者欺骗,他们可能会将目标服务器的挑战重播给您,这让您误以为您正在连接到远程资源,而实际上他们正在连接到该资源你的凭据。在更改连接机制以跳过HostKeyChecking之前,您应该仔细考虑是否存在适当的风险。

Reference


2
投票

通常,当您经常修改密钥时会出现此问题。基于服务器,可能需要一些时间来更新您在服务器中生成并粘贴的新密钥。因此,在生成密钥并粘贴到服务器后,等待3到4个小时然后尝试。问题应该解决。它发生在我身上。


1
投票

理想情况下,您应该创建一个自我管理的证书颁发机构。从生成密钥对开始: ssh-keygen -f cert_signer

然后签署每个服务器的公共主机密钥: ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pub

这将生成一个签名的公共主机密钥: /etc/ssh/ssh_host_rsa_key-cert.pub

/etc/ssh/sshd_config中,将HostCertificate指向此文件: HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

重启sshd服务: service sshd restart

然后在SSH客户端上,将以下内容添加到~/.ssh/known_hosts @cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

以上包含:

  • @cert-authority
  • *.example.com
  • 公钥cert_signer.pub的全部内容

cert_signer公钥将信任其公共主机密钥由cert_signer私钥签名的任何服务器。

虽然这需要在客户端进行一次性配置,但您可以信任多个服务器,包括那些尚未配置的服务器(只要您签署每个服务器即可)。

有关更多详细信息,请参阅this wiki page


1
投票

将这些添加到/ etc / ssh / ssh_config

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no

-1
投票

在主机服务器上运行它是预感问题

chmod -R 700 ~/.ssh

-2
投票

我解决了下面写错误的问题: 错误: 无法建立主机“XXX.XXX.XXX”的真实性。 RSA密钥指纹是09:6c:ef:cd:55:c4:4f:ss:5a:88:46:0a:a9:27:83:89。

解: 1.安装任何openSSH工具。 2.运行命令ssh 3.它会要求你添加这个主机。接受是的。 4.此主机将添加已知主机列表。 5.现在您可以与此主机连接。

这个解决方案现在正在......


67
投票

值得更好回答的老问题。

您可以在不禁用StrictHostKeyChecking(这是不安全的)的情况下阻止交互式提示。

将以下逻辑合并到您的脚本中:

if [ -z `ssh-keygen -F $IP` ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

它检查服务器的公钥是否在known_hosts中。如果没有,它从服务器请求公钥并将其添加到known_hosts

通过这种方式,您只会遭受一次中间人攻击,这可以通过以下方式减轻:

  • 确保脚本首次通过安全通道连接
  • 检查日志或known_hosts手动检查指纹(仅执行一次)

33
投票

要禁用(或控制禁用),请将以下行添加到/etc/ssh/ssh_config的开头...

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

选项:

  • 主机子网可以是*,以允许不受限制地访问所有IP。
  • 编辑用于全局配置的/etc/ssh/ssh_config或用于特定于用户的配置的~/.ssh/config

http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

类似的问题在superuser.com上 - 请参阅https://superuser.com/a/628801/55163


15
投票

确保~/.ssh/known_hosts是可写的。这为我解决了这个问题。


11
投票

除此之外,最好的方法是使用'BatchMode'和'StrictHostKeyChecking'。这样,您的脚本将接受新的主机名并将其写入known_hosts文件,但不需要是/否干预。

ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime"

10
投票

编辑通常位于'〜/ .ssh / config'的配置文件,并在文件的开头添加以下行

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

用户设置为your_login_user表示此设置属于your_login_user StrictHostKeyChecking设置为no将避免提示 IdentityFile是RSA密钥的路径

这适用于我和我的脚本,祝你好运。


6
投票

由于安全功能而发出此警告,请勿禁用此功能。

它只显示一次。

如果它仍然出现在第二次连接后,问题可能是写入known_hosts文件。在这种情况下,您还将收到以下消息:

Failed to add the host to the list of known hosts 

您可以通过更改用户可以写入的文件权限更改的所有者来修复它。

sudo chown -v $USER ~/.ssh/known_hosts

4
投票

参考Cori的答案,我修改了它并使用了下面的命令,这是有效的。没有exit,剩下的命令实际上是记录到远程机器,我不想在脚本中

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"

3
投票

这样做 - > chmod +w ~/.ssh/known_hosts。这会在~/.ssh/known_hosts中为文件添加写入权限。之后,当您下次连接到远程主机时,它将被添加到known_hosts文件中。

© www.soinside.com 2019 - 2024. All rights reserved.