ssh:主机'主机名'的真实性无法build立

当我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客户端,您可以在命令行上将StrictHostKeyChecking选项设置为no,和/或将密钥发送给一个空的known_hosts文件。 您还可以在configuration文件中设置这些选项,可以是所有主机,也可以是给定的一组IP地址或主机名。

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

编辑

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

参考 。

老问题,值得更好的答案。

您可以禁用交互式提示而不禁用StrictHostKeyChecking (这是不安全的)。

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

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

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

通过这种方式,您只能接触到一次中间人攻击,这可以通过以下方式来缓解:

  • 确保脚本首次通过安全通道连接
  • 检查日志或known_hosts手动检查指纹(只能完成一次)

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

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

选项:

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

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

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

确保~/.ssh/known_hosts是可写的。 这为我修好了。

编辑通常位于'〜/ .ssh / config'的configuration文件,在文件的开始处添加下面的行

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

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

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

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

 ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime" 

此警告是由于安全function而发出的,请勿禁用此function。

它只显示一次。

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

 Failed to add the host to the list of known hosts 

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

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

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

关于Cori的回答,我修改了它,并使用了正在工作的下面的命令。 没有exit ,其余的命令实际上是login到远程机器,我不想在脚本中

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

这样做 – > chmod + w〜/ .ssh / known_hosts这增加了对〜/ .ssh / known_hosts文件的写入权限。 之后,当您下次连接到远程主机时,远程主机将被添加到known_hosts文件中。

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

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

这个解决scheme现在在工作……