使用已知主机密钥和反向隧道 ssh 网关

使用已知主机密钥和反向隧道 ssh 网关

我正在使用反向隧道通过 提供对 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>

使用此配置,将 连接clientproxy工作正常,将 连接serverproxy(使用反向隧道)工作正常。但是当我通过 连接到 时clientserverproxy收到一条消息:

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 分钟左右),我就会得到proxyclient完全相同的提示完全相同的指纹(与 返回的指纹相同ssh-keygen -lf /path/to/server.pub)。

我有问题:

  1. 哪个系统发出了“真实性”警告?是它proxy还是我自己的client
  2. 为什么一分钟后重新连接不会触发提示,但三十分钟后重新连接就会触发提示?
  3. 是否存在某个地方的日志或某种监控工具可以帮助我验证该Permanently added...消息是否确实在执行任何操作,如果是,那么它触及了哪些文件?
  4. 当使用 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 分钟不活动后自行终止。

相关内容