为了工作,我必须从本地计算机通过计算机 A 进行 ssh 访问计算机 B。问题是计算机 A 没有 X11 转发,而且我没有超级用户权限来更改它。我在机器 B 上确实拥有超级用户权限,并且它打开了 X11 转发。
有没有办法将 X11 从 B 通过 A 转发到我的本地计算机,而无需在 A 上打开 X11 转发?
我尝试运行
ssh -t -X user@A ssh -X user@B
,ssh -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