当我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.
有没有办法自动说“是”或忽略这个?
答案 0 :(得分:115)
根据您的ssh客户端,您可以在命令行上将StrictHostKeyChecking选项设置为no,和/或将密钥发送到null known_hosts文件。您还可以在配置文件中为所有主机或给定的IP地址或主机名设置这些选项。
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
修改强>
正如@IanDunn所说,这样做存在安全隐患。如果您连接的资源已被攻击者欺骗,他们可能会将目标服务器的挑战重播给您,这让您误以为您正在连接到远程资源,而实际上他们正在连接到该资源你的凭据。在更改连接机制以跳过HostKeyChecking之前,您应该仔细考虑是否存在适当的风险。
答案 1 :(得分:67)
值得更好回答的老问题。
您可以在不禁用StrictHostKeyChecking
(这是不安全的)的情况下阻止交互式提示。
将以下逻辑合并到您的脚本中:
if [ -z `ssh-keygen -F $IP` ]; then
ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi
它检查服务器的公钥是否在known_hosts
中。如果没有,它会从服务器请求公钥并将其添加到known_hosts
。
通过这种方式,您只会遭受一次中间人攻击,这可以通过以下方式减轻:
答案 2 :(得分: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
答案 3 :(得分:15)
确保~/.ssh/known_hosts
可写。这为我解决了。
答案 4 :(得分:11)
最好的方法是使用&#39; BatchMode&#39;除了'StrictHostKeyChecking&#39;。这样,您的脚本将接受新的主机名并将其写入known_hosts文件,但不会要求是/否干预。
ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"
答案 5 :(得分:10)
编辑通常位于&#39;〜/ .ssh / config&#39;的配置文件,并在文件的开头添加以下行
Host *
User your_login_user
StrictHostKeyChecking no
IdentityFile ~/my_path/id_rsa.pub
用户设置为your_login_user
表示此设置属于your_login_user
StrictHostKeyChecking设置为no将避免提示
IdentityFile是RSA密钥的路径
这适用于我和我的剧本,祝你好运。
答案 6 :(得分:6)
由于安全功能而发出此警告,请勿停用此功能。
它只显示一次。
如果在第二次连接后仍然出现,则问题可能是写入known_hosts
文件。
在这种情况下,您还会收到以下消息:
Failed to add the host to the list of known hosts
您可以通过更改用户可以更改文件权限的所有者来修复此问题。
sudo chown -v $USER ~/.ssh/known_hosts
答案 7 :(得分:4)
参考Cori的回答,我修改了它并使用了下面的命令,这是有效的。没有exit
,剩下的命令实际上是登录到远程机器,我在脚本中并不想要
ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
答案 8 :(得分:2)
通常,在经常修改密钥时会出现此问题。基于服务器,可能需要一些时间来更新您在服务器中生成并粘贴的新密钥。因此,在生成密钥并粘贴到服务器后,等待3到4个小时然后尝试。问题应该解决。它发生在我身上。
答案 9 :(得分:2)
这样做 - &gt; ~/.ssh/known_hosts
。这会在known_hosts
处为文件添加写入权限。之后,当您下次连接到远程主机时,它将被添加到{{1}}文件中。
答案 10 :(得分: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。
答案 11 :(得分:0)
将它们添加到您的/ etc / ssh / ssh_config
Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
答案 12 :(得分:0)
我遇到了同样的错误,并想提请您注意-就像我刚发生的那样-您可能拥有错误的权限。
您已经将.ssh
目录设置为常规用户或root
用户,因此您需要成为正确的用户。出现此错误时,我是root
,但我将.ssh
配置为普通用户。退出root
可以解决此问题。
答案 13 :(得分:0)
以下步骤用于向主机进行身份验证
ssh-keygen -f ~/.ssh/id_ecdsa -t ecdsa -b 521
(以上使用推荐的加密技术)
ssh-copy-id -i ~/.ssh/id_ecdsa user@host
N.B用户@主机将与您不同。您需要输入此服务器的密码,而不是密钥密码。
ssh user@host
所有源信息都位于此处: ssh-keygen
答案 14 :(得分:0)
在我的情况下,主持人是未知的,而不是在问题yes
中输入are you sure you want to continue connecting(yes/no/[fingerprint])?
,而我只是打enter
。
答案 15 :(得分:0)
这是尝试建立无密码身份验证。因此,如果您尝试手动运行该命令一次,它会要求在那里提供密码。输入密码后,它会永久保存该密码,并且不再要求输入“是”或“否”。
答案 16 :(得分:-1)
在主机服务器上运行它是先发问题
chmod -R 700 ~/.ssh
答案 17 :(得分:-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.现在您可以与此主机联系。
此解决方案现在正在运作......