我正在尝试连接到防火墙后面的服务器。
对于此连接,我必须使用多个跳转服务器。 所以我 SSH
local
→ user1@jump1
→ user2@jump2
→ user3@server
。
我可以直接连接到服务器
ssh -J user1@jump1,user2@jump2 user3@server
我想在本地计算机上的 Sublime Text 和目标服务器上的
rmate
之间建立隧道连接。我按照 data36 上的说明进行操作。在描述中,用户只需使用连接到一台服务器
ssh -R 52698:localhost:52698 user3@server
我还没有找到类似的三服务器。有没有办法做到这一点?也许有人可以给我一个端口的例子。
我已经尝试过了
ssh -R 52698:localhost:52698,52698:jump1:52698, 52698:jump2:52698, 52698:server:52698 -J user1@jump1,user2@jump2 user3@server
但这给了我错误:
错误的远程转发规范 52698:localhost:52698,52698:jump1:52698,52698:jump2:52698,52698:server:52698
名称
jump1
、jump2
和 server
代表各自的 IP 地址。因此,在真正的 ssh
命令中,我使用 IP 地址而不是名称。
你想多了。端口转发并不是在每个连接上都进行跳转。您通过所有链路建立隧道,然后通过隧道转发您的端口。
ssh -J user1@jump1,user2@jump2 -R 52698:localhost:52698 user3@server
或者——甚至更好——将配置放入
~/.ssh/config
:
Host jump1
Hostname 1.1.1.1
User user1
Host jump2
Hostname 2.2.2.2
User user2
ProxyJump jump1
Host server
Hostname 3.3.3.3
User user3
ProxyJump jump2
RemoteForward 52698
然后就
ssh server
。
如果需要,您可以向
Host
块添加其他必要的配置。如果服务器使用端口 8080,您可以将 Port 8080
放入其块中。或者添加一个额外的密钥文件什么的。
在带有
-J
的 CLI 上,您只能自定义每个跃点的用户、主机和端口:以逗号分隔的 [user@]host[:port]
列表。
该命令不起作用的原因是
jump1
和 jump2
没有相应的 rmate
服务器侦听这些特定端口并在下一个服务器上转发,因此信号在 jump1
处消失。如果您在 jump1
和 jump2
上有 shell 帐户,您可以在每个帐户以及最后一个 rmate
框中设置
server
。
理论上这应该可行,但我没有任何方法来测试它。如需更多帮助,您也可以尝试在官方Sublime Text论坛上发帖,看看是否有比我更有经验的人可以给您一些建议。