通过反向(远程)SSH隧道进行SSH连接

这是我有的设置:

  • 在防火墙后面的一个LAN内的一个Linux机箱A.

  • 具有可从互联网访问的固定IP地址的Linux服务器。

我希望能够通过SSH连接到远程防火墙后面的Linux机器。 我读过关于SSH隧道,我想到这可能是我的解决scheme。 我能够打开A和B之间的远程SSH隧道。但我不知道如何使用这个隧道通过SSH控制A,或者甚至可能。 例如:从我的笔记本电脑通过B连接到A.

正如我了解它打开隧道,这是命令:

ssh -R 2022:localhost:22 user@serverB 

(通过端口2022的请求传送到目标机器的端口22(ssh))通过user @ serverB。

打开这个隧道后,应该通过ssh连接到目标机器的动作是什么?

如果我的理解是错误的,请纠正我。

你所指的是“SSH远程转发”,关于“ -R ”选项,在“ man ssh ”中有适当的解释。

 > man ssh [...] -R [bind_address:]port:host:hostport Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side. This works by allocating a socket to listen to port on the remote side, and whenever a connection is made to this port, the connection is forwarded over the secure channel, and a connection is made to host port hostport from the local machine. [...] 

在你的情况下,在哪里:

  • 在防火墙后面的一个LAN内的一个Linux机箱A(LINUX_BOX_A)。
  • 具有可从互联网访问的固定IP的Linux服务器B(SERVER_B)

SSH远程转发可用于从SERVER_B到达LINUX_BOX_A。 唯一的条件是:LINUX_BOX_A 必须能够通过SSH连接到SERVER_B。

要达到这个目标,你需要:

  1. 在LINUX_BOX_A上:

LINUX_BOX_A:~ $ ssh -R 2222:localhost:22 user@SERVER_B

这将打开一个从LINUX_BOX_A到SERVER_B的ssh连接,用于远程连接,传入连接。

上面的ssh连接build立之后,你可以:

  1. 在SERVER_B上:

SERVER_B:~ $ ssh -p 2222 user@localhost

在SERVER_B上启动的这种SSH连接将被定向到监听本地主机的2222端口,该端口绑定到以前的ssh连接。 所以这将是一个“在另一个SSH连接的SSH连接”。

一些附加说明:

  • 考虑一下,如果第一个SSH连接由于某种原因(包括:由于本地防火墙而被杀,由于不活动)而超时和/或宕机,您将无法远程转发/ remote_connect;

  • 因为让第一个ssh连接长时间保持活动非常重要,所以在“ 屏幕 ”会话中启动这样的ssh可能会很有用

最后一点:显然,以上所有都有一些(可能是严重的)安全问题,超出了这个答案的范围。

如果你控制防火墙,你可以使用port-fowarding来避免使用reverse-ssh(它会更稳定)。