如何强制 ssh 隧道(或 ProxyCommand)使用现有的主连接?

如何强制 ssh 隧道(或 ProxyCommand)使用现有的主连接?

有三台运行 Linux 的机器 A、B 和 C。我对机器 A 和 B 有 root 访问权限,但没有 C 的访问权限。A 是我的本地机器,我想连接到 C。C 只能通过 VPN 上的 ssh 访问。我无法直接从 A 连接到 C,因为 A 中的 VPN 流量被阻止了。我可以使用共享密钥通过 ssh 从 A 连接到 B。我在 B 中运行 openvpn,然后我可以通过 ssh 连接到 C,但 C 不接受共享密钥。我想直接将文件从 C scp 到 A,再从 A scp 到 C,无需密码,因此我在 B 中创建了一个 ssh 主连接,在 A 中创建了一个 ssh 隧道。但是,我无法使隧道使用 B 中的主连接。我的问题是,如何设置 ssh 以便使用 B 中现有的主连接从 A 连接到 C?

答案1

我认为有三种方法可以实现这一目标:

1.您可以在 A 上运行 scp,而不是仅仅 ssh 到另一台主机并在那里运行 scp,您可以将其 ssh 到 B,然后在 B 上运行另一个 ssh 命令以连接到 C 并在那里运行服务器端 scp。

看起来 scp 没有指定如何在远程端调用 scp 的选项,但它有一个指定如何在本地调用 ssh 的选项。这个-S选项旨在告诉它在哪里找到ssh

您可以做的是运行 scp 并-S带有指向脚本的选项。然后该脚本将 ssh 到 B 并在那里运行 ssh,B 上的 ssh 命令必须使用 A 上的 scp 为脚本提供的所有选项来调用。

2.如果您能够设法在 C 上配置授权密钥文件,则可以让 A 直接向 C 进行身份验证。您可能只缺少对 C 上的授权密钥文件的适当权限。由于 A 无法直接连接到 C,因此您将指定运行的 ProxyCommandssh -W以从 A 连接到 B。听起来您的情况下需要~/.ssh/config在 A 上进行。要使用的值将是ssh -W %h:%p B

3.在 C 上运行 scp 命令并让 C 重新连接到 A。如果 C 无法直接连接到 A,则可以通过使用上面建议的 ProxyCommand 或者在 A 和 B 之间或 B 和 C 之间设置 ssh 反向端口转发来打开连接。

相关内容