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

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

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

我的部署脚本如下所示:

ssh [email protected] -i ./travis/id_rsa <<EOF
  echo "PRINT SOMETHINGGGGGGGGGGGGGGGGG"
EOF

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

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

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

Host *
    StrictHostKeyChecking no

然而,即使采用这种设置,它仍会要求我输入指纹。

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)? 

我怎样才能阻止它询问?

答案1

来自文档

严格主机密钥检查

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

您需要添加该设置在客户端上,或者将以下行

# for all hosts
Host *
    StrictHostKeyChecking no

或者

# for a particular host
Host 123.123.123.123
    StrictHostKeyChecking no

进入你的当地的 ~/.ssh/config

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

ssh -o StrictHostKeyChecking=no [email protected] -i ./travis/id_rsa

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

相关内容