通过两个 SSH 隧道转发 X11

通过两个 SSH 隧道转发 X11

为了工作,我必须从本地计算机通过计算机 A 进行 ssh 访问计算机 B。问题是计算机 A 没有 X11 转发,而且我没有超级用户权限来更改它。我在机器 B 上确实拥有超级用户权限,并且它打开了 X11 转发。

有没有办法将 X11 从 B 通过 A 转发到我的本地计算机,而无需在 A 上打开 X11 转发?

我尝试运行 ssh -t -X user@A ssh -X user@Bssh -t user@A ssh -X user@B 但机器 A 仍然X11 forwarding request failed on channel 0在登录时输出。

答案1

将其添加到您的 ~.ssh/config 中:

Host BviaA
  HostName      hostB
  ProxyCommand  ssh user@hostA nc %h %p 2> /dev/null

然后ssh -X user@BviaA应该工作

请注意,在上面的配置部分中,我用来Host BviaA使发生的情况更加明显。您还可以使用Host hostB让它完全透明地工作:(ssh -X user@hostB就好像不需要网关一样。)

或者作为无需任何配置更改的单行测试:

ssh -X -oProxyCommand="ssh user@hostA nc %h %p" user@hostB

答案2

非常感谢@rudmeier的回答。

我遇到了问题数控使用 ssh 时的选项,但这种变化(基于 @aDroid 的解释这里)确实为我工作。所以这本质上是一样的一句话回答对于较新版本的 OpenSSH,@rudmeier 的:

$ ssh -X -oProxyCommand="ssh [email protected] -W %h:%p" [email protected]

@用户4556274回答也为我工作(也感谢你)。

我只是在这两个步骤中添加用户名,以向像我这样的新手阐明它是如何工作的(输入第一个命令后,本地主机端口 2222 的行为就像是机器 B 中的端口 22 一样;所以在第二个命令中,我们传递机器 B 的用户名):

$ ssh -Nf -L2222:destination.host-B.address:22 [email protected]
$ ssh -p 2222 -X userB@localhost

答案3

您也许可以通过 A 进行端口转发。使用

$ ssh -Nf -L2222:B:22 A

启动并后台 ssh 进程,该进程将从本地计算机通过 A 转发到 B。然后使用

$ ssh -p 2222 -X localhost

相关内容