使用 jumphost 时,SSH 询问我是否要继续

使用 jumphost 时,SSH 询问我是否要继续

我正在尝试使用 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=noetc) 应用于最终连接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

相关内容