我正在尝试从通过 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
你只需告诉客户端只是相信/信任目标机器并接受其密钥。