假设我们有三个主机:
miki
- 我的计算机位于 NAT 后面vps0
- 我的VPSmum
- 我母亲的计算机,位于不同的 NAT 后面。
任务是从我的电脑连接到我妈妈并保持 X11 转发。到目前为止,我使用的是反向隧道,如下所示:
# on mum's computer (at crontab on reboot):
autossh -fN -M 3986 -R 1993:localhost:22 login@vps0
# when I want to connect to mum's computer
miki$ ssh login@vps0
vps0$ ssh localhost -p 1993
上述方法有一个缺点,我无法使用 X11 转发(-X 参数) - 我无法远程打开窗口。
我想知道是否可以直接连接到我妈妈的电脑并保持 X11 转发。
附言。我在主题中播种答案:通过中间人服务器的 SSH 隧道 - 如何一步连接(使用密钥对)?。不幸的是,使用该解决方案会导致 X11 转发不起作用。
答案1
为什么该解决方案不适ProxyCommand
用于 X11 转发?我认为您可以使用以下配置通过 X11 转发直接到达妈妈的计算机。
Host mum
ProxyCommand ssh -q -W localhost:1993 login@vps0
ForwardX11 yes
答案2
如果你了解X11转发是怎么回事,你就会知道它并不像@yaegashi的答案中描述的那么简单。 X11 转发在 ssh 下创建了另一层,它不能像普通终端数据流一样链接。但您可以使用端口转发来做到这一点:
基于此博客文章,它将其作为 shell 脚本中的硬编码来执行。我试图使用 做同样的事情ssh_config
,但没有成功。您只需要在原始脚本中添加反向隧道的复杂性
sshx () {
# create the tunnel from vps0 to your host
sudo ssh -Nn vps0 -L 3991:vps0:1993 &
sleep 1s
PID=$!
# connect to localhost on forwrded port
ssh localhost -XYC -p3991
sudo kill $PID
}
我希望它对你有用