我想使用 OpenSSH 允许通过两跳进行端口转发,最后一跳通过反向隧道连接。
以下是我当前的设置:
服务器 B 在端口 10000 上运行 sshd。服务器 C 在端口 20000 上运行 sshd
客户端 A 通过“普通” SSH 连接到服务器 B
服务器 C 在端口 30000 上打开到服务器 B 的反向 SSH 隧道
服务器 B 通过该反向隧道连接到服务器 C
我想要做的:在客户端 A 上打开一个端口,将客户端 A 的连接通过服务器 B 转发到服务器 C(通过服务器 B 和服务器 C 之间建立的反向 SSH 隧道)
以下是我目前正在使用的各个命令:
客户端 A 通过“普通” SSH 连接到服务器 B:
ClientAHostName $ ssh -p 10000 User@ServerBHostName
服务器 C 在端口 30000 上打开到服务器 B 的反向 SSH 隧道:
ServerCHostName $ ssh -p 10000 -N -R 30000:localhost:20000 User@ServerBHostName
服务器 B 通过该反向隧道连接到服务器 C:
ServerBHostName $ ssh -p 30000 User@localhost
我之所以要这样做,是为了能够通过 Web 浏览器(使用转发端口)从客户端 A 控制服务器 C 上的某些服务。由于客户端 A 和服务器 C 的 ISP 的限制,我无法直接从服务器 B(或客户端 A)连接到服务器 C,也无法从服务器 C 连接到客户端 A。
答案1
为了简化操作,我喜欢为每个服务器分配一个端口号或范围。保留您开始时的端口号,B 是 10000,C 是 20000,忘记 30000。
设置:
A$ ssh -p 10000 -N -L 20000:localhost:20000 UserB@B
C$ ssh -p 10000 -N -R 20000:localhost:20000 UserB@B
现在你应该可以做到
A$ ssh -p 20000 UserC@localhost
在 C 上获取 shell,并假设您想要连接到在服务器 C 端口 8080 上运行的 Web 服务器:
A$ ssh -p 20000 -N -L 8080:localhost:8080 UserC@localhost
连接到:
http://localhost:8080/