我正在尝试从我的脚本设置自动部署,该脚本通过 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)
我如何阻止它询问?
从文档:
严格的主机密钥检查
[...] 如果此标志设置为“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你只要告诉客户只是相信/相信在目标机器并接受它的关键。
| 归档时间: |
|
| 查看次数: |
11085 次 |
| 最近记录: |