在一步而不是两步中使用反向 SSH 隧道(使用 -X)

在一步而不是两步中使用反向 SSH 隧道(使用 -X)

假设我们有三个主机:

  • miki- 我的计算机位于 NAT 后面
  • vps0- 我的VPS
  • mum- 我母亲的计算机,位于不同的 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
}

我希望它对你有用

相关内容