我正在寻找将 VNC 端口路由回我家的方法。我必须跳过单个主机,然后跳到我的实际工作机器。
sittinghere
将是我本地的家用机器hopper
将通过我需要进行的中间跳跃overthere
将是远程工作机器
我可以通过 SSH 连接到我的工作机器:
ssh -t hopper "ssh -t overthere"
我想使用端口转发将远程端口 5900 转发overthere
到 上的本地端口 5900 sittinghere
。但是,我希望能够在不绑定到公开端口的情况下完成此操作,hopper
因为该计算机上的任何人都可以连接到我的 VNC 连接。
有什么方法可以让我将该端口安全地转发到我的本地计算机,而没有人能够访问它hopper
吗?
答案1
使用 SSH 的本机功能来转发端口。从sittinghere
执行:
ssh -v -N -L 5900:overthere:5900 user@hopper
将您的 VNC 客户端指向localhost:5900
,流量将overthere:5900
通过建立在hopper
答案2
我最终使用了一些 SSH ~/.ssh/config
hack 来实现这一点:
Host hopper
User naftuli
ForwardAgent yes
Host overthere
User naftuli
ForwardAgent yes
ProxyCommand ssh -q hopper nc overthere 22
它的作用是,当我尝试连接到ssh overthere
from 时sittinghere
,它会连接到hopper
并代理 SSH 连接到端口 22 overthere
(即: SSH on overthere
)。
这有一些很棒的副作用:
ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"
一切都工作得很好,据我所知,5900 没有在 上打开hopper
,只是直接从 转发overthere
到sittinghere
。
答案3
您可以通过将端口从sittinghere
SSHoverthere
端口转发到hopper
。然后您可以使用该端口overthere
直接从到达sittinghere
。在第二个 SSH 会话中,您可以转发 VNC 或您喜欢的任何其他端口,同时hopper
只能看到加密的 SSH 会话。
第一个 SSH 会话:
ssh -f -N -L 7022:overthere:22 hopper
overthere
现在通过将此配置添加到~/.ssh/config
on来告诉 SSH 客户端如何到达sittinghere
Host overthere
HostName hopper
Port 7022
HostKeyAlias overthere
第二次 SSH 会话:
ssh -f -N -L 5900:localhost:5900 overthere
或者只是一个没有 VNC 端口隧道的常规交互式 SSH 会话:
ssh overthere
如果您不想费心添加行,~/.ssh/config
您仍然可以告诉它如何从命令行连接overthere
:
ssh -p 7022 hopper
...但是如果没有HostKeyAlias
SSH 将无法overthere
正确验证密钥指纹。
所有命令行都将从 运行sittinghere
。
顺便说一句,我认为您可能不需要使用ssh
s-t
选项。
答案4
vncviewer
如果您从命令行使用 VNC 客户端,则可以使用-via
开关告诉它user@host
在连接到其他主机的 VNC 服务器之前先通过隧道。
例子
$ vncviewer -via user@host localhost:0
您还可以vinagre
通过 GUI 来通过 SSH 隧道进行连接。为此,请通过以下连接对话框设置与此类似的连接vinagre
:
这将导致您的连接通过 SSH 隧道主机建立隧道。