这是我有的设置:
在防火墙后面的一个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. [...]
在你的情况下,在哪里:
SSH远程转发可用于从SERVER_B到达LINUX_BOX_A。 唯一的条件是:LINUX_BOX_A 必须能够通过SSH连接到SERVER_B。
要达到这个目标,你需要:
LINUX_BOX_A:~ $ ssh -R 2222:localhost:22 user@SERVER_B
这将打开一个从LINUX_BOX_A到SERVER_B的ssh连接,用于远程连接,传入连接。
上面的ssh连接build立之后,你可以:
SERVER_B:~ $ ssh -p 2222 user@localhost
在SERVER_B上启动的这种SSH连接将被定向到监听本地主机的2222端口,该端口绑定到以前的ssh连接。 所以这将是一个“在另一个SSH连接的SSH连接”。
一些附加说明:
考虑一下,如果第一个SSH连接由于某种原因(包括:由于本地防火墙而被杀,由于不活动)而超时和/或宕机,您将无法远程转发/ remote_connect;
因为让第一个ssh连接长时间保持活动非常重要,所以在“ 屏幕 ”会话中启动这样的ssh可能会很有用
最后一点:显然,以上所有都有一些(可能是严重的)安全问题,超出了这个答案的范围。
如果你控制防火墙,你可以使用port-fowarding来避免使用reverse-ssh(它会更稳定)。