我的情况:
我(本地主机) – >服务器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