我正在使用反向隧道通过 提供对 SSH 服务器的访问ProxyJump
,但无法让客户端记住主机公钥。尽管指示它“永久添加到已知主机列表中”,但我收到相同的消息使用相同的密钥当我稍后尝试重新连接时。密码验证已禁用。我已经生成密钥并复制了公钥,如下所示:
server.local
keys:
server.host[.pub]
server.user[.pub]
known_hosts:
proxy.local ssh-rsa <proxy.host.pub>
authorized_keys:
ssh-rsa <client.user1.pub>
proxy.local
keys:
proxy.host[.pub]
known_hosts:
server.local ssh-rsa <server.host.pub>
[localhost]:50000 ssh-rsa <server.host.pub>
authorized_keys:
ssh-rsa <server.user.pub>
ssh-rsa <client.user2.pub>
client.local
keys:
client.user1[.pub]
client.user2[.pub]
known_hosts:
proxy.local ssh-rsa <proxy.host.pub>
server.local ssh-rsa <server.host.pub>
[localhost]:50000 ssh-rsa <server.host.pub>
使用此配置,将 连接client
到proxy
工作正常,将 连接server
到proxy
(使用反向隧道)工作正常。但是当我通过 连接到 时client
,server
我proxy
收到一条消息:
The authenticity of host '[localhost]:50000' (<no hostip for proxy command>)' can't be established.
RSA key fingerprint is <fingerprint of server.pub>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
如果我选择yes
,它会显示以下消息,并且我能够成功连接到server
:
Warning: Permanently added '[localhost]:50000' (RSA) to the list of known hosts.
即使在此之后,和known_hosts
上的仍然保持不变。如果我快速断开连接并重新连接,我可以重新连接而无需任何进一步的提示。但如果我等一会儿(约 30 分钟左右),我就会得到proxy
client
完全相同的提示和完全相同的指纹(与 返回的指纹相同ssh-keygen -lf /path/to/server.pub
)。
我有问题:
- 哪个系统发出了“真实性”警告?是它
proxy
还是我自己的client
? - 为什么一分钟后重新连接不会触发提示,但三十分钟后重新连接就会触发提示?
- 是否存在某个地方的日志或某种监控工具可以帮助我验证该
Permanently added...
消息是否确实在执行任何操作,如果是,那么它触及了哪些文件? - 当使用 ProxyJump、反向隧道或两者时,我是否缺少一些设置已知密钥的特殊考虑?
答案1
我相信这篇文章中有解释 使用代理跳转时无法禁用 SSH 主机密钥检查 尤其是 Jakuje 的回答,我在此引用:
发出
ProxyJump
另一个ssh
进程,该进程不会继承您在第一个命令的命令行上指定的命令行参数ssh
。有两种可能的解决方法:
在配置文件中使用这些选项
~/.ssh/config
——它也可以为您节省大量的输入!Host jumpbox User jumpuser StrictHostKeyChecking=no UserKnownHostsFile=/dev/null IdentityFile ~/.ssh/id_jumpuser_rsa
然后您就可以像 一样连接。
ssh -J jumpbox [email protected]
- 改用
ProxyCommand
选项——它做同样的工作,但更透明,这样你就可以看到实际发生了什么:
ssh -o ProxyCommand="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/id_jumpuser_rsa -W %h:%p jumpuser@jumpbox" -i ~/.ssh/id_jumpuser_rsa [email protected]
第二个 SSH 进程的解释说明了为什么您的本地已知密钥不起作用,因为它们没有被传递。我猜想第二个 SSH 会持续大约 30 分钟,以处理未来的连接,然后在 30 分钟不活动后自行终止。