通过SSH隧道转发SSH

我的情况:

我(本地主机) – >服务器A(IP:100.100.100.100)=>(服务器B(IP:192.168.25.100),服务器….)

我能SSH进入服务器,因为它有一个真正的IP,如果我然后要连接到服务器B,我会ssh服务器B与它的IP(192.168.25.100)

例:

从我的电脑:

ssh [email protected] 

那么在100.100.100.100中,

 ssh [email protected] 

这将使我与服务器B与SSH

如果我想直接连接到服务器b呢? 我怎样才能做到这一点?

例:

从我的oc:

 [email protected] 

我已经尝试了以下内容:

 ssh -L 22:localhost:22 [email protected] 

没有成功

你的问题是在一个监听器绑定到localhost:22; 已经有一个sshd在听这个。 通过SSH连接隧道SSH连接是完全合法的,我一直这样做,但你需要为您的转发监听器select未使用的端口。

尝试

 me% ssh [email protected] -L 2201:192.168.25.100:22 

然后

 me% ssh localhost -p 2201 

你应该最终在服务器B上(除非有东西已经绑定到我:2201,在这种情况下,select另一个端口)。

您不必使用ssh端口转发通过代理ssh到内部计算机。 您可以使用sshfunction在您连接的第一台服务器上执行命令,以便ssh进入第三台计算机。

 ssh -t [email protected] ssh [email protected] 

-t选项强制ssh分配一个伪tty,所以你可以运行一个交互式命令。

这也可以使用SSH密钥。 如果您在机器A上拥有您的私钥和公钥,并且您的公钥在机器B和C上的授权密钥文件中,那么您可以使用-A选项转发authentication代理连接。

我使用了不同的解决scheme。 我使用了一个ProxyCommand选项(在~/.ssh/config ):

 Host myinsidehost1 myinsidehost2 myinsidehost3 ProxyCommand ssh externalhost ssh %h sshd -i 

这不会设置任何端口到端口的隧道,而是使用标准的标准input/输出来隧道ssh。 这种方法有一个缺点,实际上有三个SSH连接进行身份validation。 但要连接到内部主机,只需input:

 ssh myinsidehost2 

…所以你不需要关心为隧道select任何IP。

根据ssh手册页,ProxyCommand是正确的方法

语法是:

 ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null