我有3位主持人:A
,B
,C
。 B
可以通过C
通过端口ssh
连接到221
。 A
无法连接到C
,因为它在路由器后面,但可以通过B
连接到ssh
。我需要的是从A
连接到C
。
情况总结如下:
A -- p22 ---> B
好
B -- p221---> C
好
A -- p???---> C
不起作用
我尝试了ssh
隧道的许多变体,但似乎我不了解隧道的工作原理。另外,我在任何主机上都没有root特权,因此无法在端口22
上进行端口转发。因此,我不确定完全可以完成此隧道化。但是,如果可以的话,我希望能在每个主机上运行确切的命令,以便最终从A切换到C。
答案 0 :(得分:1)
虽然您可以在这种情况下设置显式隧道,但是使用-J
选项更加方便
ssh -J B -p 221 C
或ProxyJump
选项
ssh -o ProxyJump=B -p 221 C
ssh
将首先为您连接到B
(如有必要,提示输入密码),然后从C
连接到B
。从您的角度来看,您将直接连接到C
。
答案 1 :(得分:0)
ssh -L local_port:another_host:destination_port user@host
的想法是说a /开始在local_port
上进行本地监听b /连接到远程host
(通常),然后在那儿连接another_host
并c /将您将从本地收到的所有内容转发给另一台主机的destination_port
所以,我将尝试以下操作(从主机A)
ssh -C -N -L 2222:C:221 user@B
然后从另一个终端
ssh -p 2222 user@localhost
我没有测试以上内容。如果需要的话,很高兴深入挖掘。
这是人类可以理解的解释(希望如此):
从主机A开始
ssh,在主机user
上以B
的身份连接(未将端口指定为默认端口22)
-C
压缩隧道中传输中的所有内容-N
说不要在主机B上打开tty(交互式)会话-L
说:“一旦您在B上,就开始在端口2222上监听此主机(A)(因为您不是root用户),并将所有内容转发到C的端口221” 如果您使用密码验证,它应该可以工作。证书身份验证需要在B上进行一些附加配置,才能将您的证书正确转发到C(我现在不记得确切的语法)