首次使用 连接未知服务器时ssh
,他会获得:
$ ssh root@<IP>
The authenticity of host '<IP> (<IP>)' can't be established.
ECDSA key fingerprint is SHA256:ZmlG4578we0daN56544KJFPYwH0vOi2bMPkLTv8io.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
如果环境完全在控制之下并且连接是在脚本中完成的(在我的情况下是云基础设施创建脚本),这将是痛苦的。
有没有办法自动接受该服务器并存储 IP 而known_hosts
无需手动验证?
我浏览了手册页,但找不到任何适用的内容。
也尝试过,echo yes | ssh -q root@<IP>
但没有成功。
答案1
对于 OpenSSH [强调我的]:
StrictHostKeyChecking
如果此标志设置为
yes
,ssh(1)
则永远不会自动将主机密钥添加到文件~/.ssh/known_hosts
,并拒绝连接到主机密钥已更改的主机。这提供了对中间人 (MITM) 攻击的最大保护,尽管当 维护/etc/ssh/ssh_known_hosts file
不善或频繁连接到新主机时可能会很烦人。此选项强制用户手动添加所有新主机。如果此标志设置为
accept-new
则会ssh
自动将新的主机密钥添加到用户的known_hosts
文件中,但不允许连接到具有已更改主机密钥的主机。如果将此标志设置为no
或off
,ssh
将自动将新主机密钥添加到用户已知主机文件中,并允许与已更改主机密钥的主机的连接继续进行,但会受到一些限制。如果将此标志设置为ask
(默认值),则只有在用户确认这是他们真正想要做的事情后,才会将新主机密钥添加到用户已知主机文件中,并且ssh
将拒绝连接到主机密钥已更改的主机。在所有情况下,将自动验证已知主机的主机密钥。
(来源)
您希望StrictHostKeyChecking accept-new
(或StrictHostKeyChecking=accept-new
,两种语法都可以)在/etc/ssh/ssh_config
或中,或者在调用时~/.ssh/config
作为选项参数:-o
ssh
ssh -o StrictHostKeyChecking=accept-new …
相反,如果您认为这是您想要的,accept-new
您可以指定。no
答案2
您可以使用如下命令:
ssh -o StrictHostKeyChecking=no root@<IP>
以避免出现此消息,但这会使你容易受到中间人攻击,所以恕我直言这不是一个好主意