我正在尝试使用 SSH 通过跳转主机连接到远程主机。出于某种原因,它告诉我即使我指定了 StrictHostKeyChecking=no 和 UserKnownHostsFile=/dev/null,也无法确定跳转主机的真实性。有人能解释为什么会发生这种情况吗?
这是我正在使用的 SSH 命令和我看到的输出:
root@af23e0535685:/# ssh -i /root/.ssh/id_rsa -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostkeyAlgorithms=+ssh-dss -caes256-cbc -oUserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -J user@jumphost:12345 host
The authenticity of host '[jumphost]:12345 ([1.2.3.4]:12345)' can't be established.
ECDSA key fingerprint is SHA256:PmtXzdDfo+TrHhUgXWls8PeNh1XdHfTCEpEiT/ACT5I.
Are you sure you want to continue connecting (yes/no)?
最终,我将使用此命令作为 Python 中的 Paramiko ProxyCommand 字符串,但首先我需要禁用此提示。
SSH 版本为“OpenSSH_7.9p1 Debian-10+deb10u2,OpenSSL 1.1.1d 2019 年 9 月 10 日”
我在 Docker 容器中运行 Debian 10.7。
答案1
ssh
将选项 ( -oUserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
etc) 应用于最终连接host
,但不应用于中间连接user@jumphost
。通常,将此类设置应用于 jumphost 的最佳方法是将它们放在 ~/.ssh/config 文件中:
Host jumphost
Port 12345
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
[...etc...]
如果你只想为该主机使用这些选项有时,您可以在配置文件中为该配置指定一个备用名称:
Host jumphost-nocheck
Port 12345
HostName jumphost
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
[...etc...]
如果您经常使用它,您还可以为Host
最终主机添加另一个包含所有这些选项的条目,并且JumpHost jumphost
它将完全自动化。
或者如果配置文件不是一个选项,你可以使用ProxyCommand
命令行上的选项(而不是-J
),并在该命令中指定必要的选项:
ssh -i /root/.ssh/id_rsa -oKexAlgorithms=+diffie-hellman-group1-sha1 \
-oHostkeyAlgorithms=+ssh-dss -caes256-cbc \
-oUserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
-oProxyCommand="ssh -W %h:%p -oUserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@jumphost-p 12345" \
host