SSH:无法建立主机“主机名”的真实性
-
01-10-2019 - |
题
当我向机器上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,和/或将键发送到null已知_ Host文件。您还可以在配置文件中设置这些选项,无论是所有主机还是给定的一组IP地址或主机名。
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
编辑
正如@iandunn所指出的那样,这样做有安全风险。如果您要连接到的资源已被攻击者欺骗,他们可能会重新重播目标服务器对您的挑战,欺骗您以为您正在连接到远程资源,而实际上他们是通过使用您的凭据。您应该仔细考虑在更改连接机制以跳过主机检查之前是否有适当的风险。
参考.
其他提示
应该得到更好答案的旧问题。
您可以防止互动提示而无需禁用 StrictHostKeyChecking
(这是不安全的)。
将以下逻辑纳入您的脚本:
if [ -z `ssh-keygen -F $IP` ]; then
ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi
它检查服务器的公钥是否在 known_hosts
. 。如果没有,它将从服务器请求公共密钥,并将其添加到 known_hosts
.
通过这种方式,您仅一次接触中间攻击一次,这可以通过以下方式减轻:
- 确保脚本通过安全频道首次连接
- 检查日志或已知_host以手动检查指纹(只能完成一次)
要禁用(或控制禁用),请添加以下几行 /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
确保 ~/.ssh/known_hosts
是可写的。这为我修复了。
解决此问题的最好方法是使用“ batchmode”之外,除了“ stricthostkeychecking”。这样,您的脚本将接受新的主机名并将其写入已知_HOSTS文件,但不需要是/否干预。
ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"
编辑正常位于'〜/.ssh/config'的配置文件,在文件的开始时,添加以下行
Host *
User your_login_user
StrictHostKeyChecking no
IdentityFile ~/my_path/id_rsa.pub
用户设置为 your_login_user
说此设置属于your_login_user
STRICTHOSTHOSTEYCHECKING设置将避免提示
IdentityFile是通往RSA键的路径
这对我和我的脚本都有用,祝您好运。
此警告是由于安全功能而发出的,请勿禁用此功能。
它只是显示一次。
如果第二个连接之后仍然出现,则问题可能是书面形式 known_hosts
文件。在这种情况下,您还将收到以下消息:
Failed to add the host to the list of known hosts
您可以通过更改用户更改文件权限的所有者来修复它。
sudo chown -v $USER ~/.ssh/known_hosts
关于Cori的答案,我对其进行了修改并使用了下面的命令。没有 exit
, ,剩余的命令实际上是登录到远程机器,我不想在脚本中
ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
这样做 - > chmod +w ~/.ssh/known_hosts
. 。这将写入权限添加到文件 ~/.ssh/known_hosts
. 。之后,远程主机将被添加到 known_hosts
下次连接到它时文件。
通常,当您经常修改键时,就会发生此问题。基于服务器,可能需要一些时间来更新您在服务器中生成和粘贴的新密钥。因此,在生成密钥并粘贴在服务器中后,请等待3至4个小时,然后尝试。问题应解决。它发生在我身上。
理想情况下,您应该创建一个自我管理的证书授权。从生成钥匙对开始:
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
私钥。
尽管这需要在客户端上进行一次性配置,但您可以信任多个服务器,包括尚未配置的服务器(只要您签署每个服务器,即)。
有关更多详细信息,请参阅 这个Wiki页面.
将它们添加到您的/etc/ssh/ssh_config
Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
在主机服务器中运行此通知问题
chmod -R 700 ~/.ssh
我遇到了同样的错误,并想提请注意这样一个事实,即 - 正如我发生在我身上 - 您可能只有错误的特权。
您已经设置了您的 .ssh
目录是常规或 root
用户,因此您需要成为正确的用户。当这个错误出现时,我是 root
但是我配置了 .ssh
作为常规用户。退出 root
修复。
我解决了以下书面错误的问题:
错误:
无法建立主机“ xxx.xxx.xxx”的真实性。
RSA键指纹为09:6C:EF:CD:55:C4:4F:SS:5A:88:46:0A:A9:27:27:83:89。
解决方案:
1.安装任何OpenSSH工具。
2.运行命令SSH
3.它会要求您添加此主机吗?接受是。
4.此主机将添加已知主机列表。
5.现在您可以与此主机联系。
该解决方案现在正在起作用……