建立SSH隧道

时间:2019-01-09 19:01:03

标签: ssh ssh-tunnel

我有3位主持人:ABCB可以通过C通过端口ssh连接到221A无法连接到C,因为它在路由器后面,但可以通过B连接到ssh。我需要的是从A连接到C

情况总结如下:

A -- p22 ---> B

B -- p221---> C

A -- p???---> C不起作用

我尝试了ssh隧道的许多变体,但似乎我不了解隧道的工作原理。另外,我在任何主机上都没有root特权,因此无法在端口22上进行端口转发。因此,我不确定完全可以完成此隧道化。但是,如果可以的话,我希望能在每个主机上运行确切的命令,以便最终从A切换到C。

2 个答案:

答案 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(我现在不记得确切的语法)