SSH:StrictHostKeyChecking 设置为 no,但仍出现提示

big*_*ato 2 server ssh

我正在尝试从我的脚本设置自动部署,该脚本通过 Travis CI 运行,因此我需要在没有任何提示的情况下通过 SSH 连接到我的服务器。

我的部署脚本如下所示:

ssh ubuntu@123.123.123 -i ./travis/id_rsa <<EOF
  echo "PRINT SOMETHINGGGGGGGGGGGGGGGGG"
EOF
Run Code Online (Sandbox Code Playgroud)

这在本地有效,因为我之前已经通过 SSH 连接到服务器并对所有提示说“是”。

在我的服务器(IP 地址:123.123.123)上,我有一个用户ubuntu.

我尝试StrictHostKeyChecking no在我的/home/ubuntu/.ssh/config文件中设置:

Host *
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

但是,即使使用此设置,它也会不断询问我的指纹。

The authenticity of host '123.123.123 (123.123.123)' can't be established.
ECDSA key fingerprint is 87:a8:8a:50:9c:a9:87:3e:c5:17:6d:b0:f1:28:7e:d3.
Are you sure you want to continue connecting (yes/no)? 
Run Code Online (Sandbox Code Playgroud)

我如何阻止它询问?

Per*_*uck 5

文档

严格的主机密钥检查

[...] 如果此标志设置为“no”或“off”,ssh 将自动将新的主机密钥添加到用户已知的主机文件中,并允许连接到主机密钥已更改的主机,但受到一些限制。[...]

您需要在客户端上添加该设置,或者通过放置行

# for all hosts
Host *
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

或者

# for a particular host
Host 123.123.123.123
    StrictHostKeyChecking no
Run Code Online (Sandbox Code Playgroud)

进入您的本地 ~/.ssh/config.

您还可以直接在ssh命令中提供该选项(从而覆盖配置文件中的任何设置):

ssh -o StrictHostKeyChecking=no ubuntu@123.123.123.123 -i ./travis/id_rsa
Run Code Online (Sandbox Code Playgroud)

主机密钥告诉客户端目标主机实际上是它假装的主机。从理论上讲,您可以致电服务器的管理员并要求他(通过电话或其他方式)告诉您的输出,ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub然后将该字符串与客户端上显示的指纹进行比较。如果它们匹配,那么您是安全的,并且可以将该密钥添加到您的known_hosts文件中。随着StrictHostKeyChecking=no你只要告诉客户只是相信/相信在目标机器并接受它的关键。