通过中间主机安全地建立隧道端口


23

我正在寻找将VNC的端口路由回我这里的房子的路径。我必须跳过单个主机,然后跳到我的实际工作机上。

  • sittinghere 将是我的本地家用机器
  • hopper 我需要做的中间跳
  • overthere 将成为远程工作机器

我可以通过以下步骤将SSH导入我的工作机:

ssh -t hopper "ssh -t overthere"

我想使用端口转发将远程端口5900转发到上overthere的本地端口5900 sittinghere。但是,我希望能够做到这一点而无需绑定到开放的端口,hopper因为该计算机上的任何人都可以连接到我的VNC连接。

我有什么办法可以安全地将该端口转发到本地计算机,而没有人可以访问它hopper吗?


您正在使用哪个VNC客户端?
slm

Answers:


18

使用SSH的本机功能转发端口。从sittinghere执行:

 ssh -v -N -L 5900:overthere:5900 user@hopper

将您的VNC客户端指向localhost:5900,流量将overthere:5900通过在上建立的SSH连接传送到hopper


1
AFAIK,如果5900仅在本地(127.0.0.1)接口上绑定(如隧道发生的那样)hopper,然后hopper将所有流量转发到,则该解决方案将无济于事overthere:5900。如果overthere:5900正在侦听0.0.0.0或给定的接口,那么它将起作用,但如果正在侦听则不起作用127.0.0.1
Naftuli Kay 2015年

18

我最终使用了一些SSH ~/.ssh/config技巧来实现这一目标:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

这里做的事情是,当我尝试连接到ssh overtheresittinghere,它连接到hopper,然后代理上的SSH连接到端口22 overthere(即:SSH上overthere)。

这有一些令人敬畏的副作用:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

一切正常,据我所知,5900并未打开hopper,仅直接从转发overtheresittinghere


顺便说一句,我本来应该在注释中提出这个问题,但是您偶然发现的解决方案正是x11nvc手册页8-)中的内容。抱歉,我没有想问您使用的是哪个VNC服务器。
slm

这吓坏了我,但肯定可以!
Dale Anderson

1
在某些Linux发行版中(例如Ubuntu 14.04),默认情况下安装了netcat-openbsd。在这种情况下,这种破解可能无法正常工作。要解决此问题,您首先应安装netcat-traditional软件包(apt-get install netcat-traditional -y)。然后,您应该nc在配置文件中明确指定类型(通过替换ncnc.traditional)。
VeLKerr

@Naftuli:的确很棒!
消失了

1
@AlexanderPozdneev netcat
taylorthurlow

1

您可以通过将端口从转发sittinghereoverthere的SSH端口hopper。然后,您可以使用该端口overthere直接从到达sittinghere。在第二个SSH会话中,您可以转发VNC或您喜欢的任何其他端口,而hopper仅看到加密的SSH会话。

第一次SSH会话:

ssh -f -N -L 7022:overthere:22 hopper

现在overthere,通过将此配置添加到~/.ssh/config,告诉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

...但是如果没有HostKeyAliasSSH,将无法overthere正确验证的密钥指纹。

所有命令行都应从运行sittinghere

顺便说一句,我认为您可能不需要使用ssh-t选项。


1

首先在工人和家用PC之间建立隧道时连接料斗。

ssh -f ismail@hopper -L 2222:overthere:22 -N

然后用vnc隧道使ssh ro overthere

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

现在您可以连接vnc。顺便说一下,更改vnc的配置以监听localhost


0

如果您vncviewer从命令行使用VNC客户端,则可以在连接到其他主机的VNC服务器之前,使用-via开关告诉它通过隧道user@host

$ vncviewer -via user@host localhost:0

您也可以vinagre像通过GUI一样使用SSH隧道进行连接。为此,可以通过以下方式通过连接对话框来设置您的连接vinagre

              SS#1

这将导致您的连接通过SSH隧道主机通过隧道建立。

    SS#2

参考文献


0

跟随命令也应该完美工作

ssh -f -N -J hopper overthere -L 5900:localhost:5900

它已通过附加参数进行了测试,以postgres-server在自定义端口(-p交换机)上连接PostgreSQL服务器,并且还使用了自定义用户名。

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

如您所见,该解决方案很简单,不需要对ssh进行任何配置更改或任何中间步骤。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.