通过SSH隧道转发SSH


30

我的情况 :

我(本地主机)->服务器A(ip:100.100.100.100)=>(服务器B(ip:192.168.25.100),服务器....)

我能够通过SSH进入服务器,因为如果我想连接到服务器b,则它具有真实的ip,我将使用ip(192.168.25.100)来SSH服务器b。

例:

从我的电脑:

ssh user@100.100.100.100

然后在100.100.100.100中,

ssh user@192.168.25.100

这将使我使用SSH进入服务器B

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

例:

从我的OC:

ssh@192.168.25.100

我尝试了以下方法:

ssh -L 22:localhost:22 user@100.100.100.100

没有成功

Answers:


30

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

尝试

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

然后

me% ssh localhost -p 2201

您应该在服务器B上结束(除非已经绑定到我:2201,在这种情况下,请选择其他端口)。


感谢您的快速回复!它确实起作用,但是,我如何转发所有连接而不是仅ssh(22)?
tom91136 2011年

1
您正在寻找的是成熟的VPN,而不仅仅是端口转发。在bodhizazen.net/Tutorials/VPN-Over-SSH上有关于如何进行vpn-over-ssh的文章,但是它需要通过A上的ssh进行远程根访问。或者您可以研究OpenVPN或其他VPN解决方案,但是,您将需要A的特权才能使这些工作。
MadHatter支持Monica

非常感谢,最后一件事,如果我只想连接到A怎么办?
tom91136 2011年

me% ssh user@100.100.100.100; 我们不是已经涵盖了吗?还是您的意思是“如果我想要一个完整的VPN到A的东西?”,在这种情况下,我的回答是正确的。
MadHatter支持Monica 2011年

1
对于希望通过SSH使用VPN的人,服务器上没有root访问权,但确实具有Python,请尝试sshuttle
安德烈·帕拉梅斯(AndréParamés)2011年

23

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

ssh -t user@100.100.100.100 ssh user@192.168.25.100

-t选项强制ssh分配伪tty,以便您可以运行交互式命令。

这也可以使用ssh键。如果您在计算机A上拥有私钥和公用密钥,并且在计算机B和C上具有授权密钥文件中的公用密钥,则可以使用该-A选项转发身份验证代理连接。


10

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

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

这不会设置任何端口到端口隧道,而是通过使用标准stdin / out隧道ssh。这种方法的缺点是实际上有三个ssh连接要进行身份验证。但是要连接到内部主机,您只需键入:

ssh myinsidehost2

...因此您无需担心为该隧道选择任何IP。


1
这是我发现可以使用的唯一一种SSH堆栈。我已经尝试过(corkscrew或),但没有一个能像这样无缝地工作。ncnetcat
Phuong Nguyen 2014年

7

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

语法为:

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

-W回答此问题时,我不确定该选项是否存在。但随着SSH客户端的新版本,我同意的结合ProxyCommand-W是首选的方法。也许添加一些上下文,以显示如何在命令行上使用它以及的示例.ssh/config
卡巴斯德,2015年

知道在哪里可以找到更改日志/版本信息,该信息可以告诉我们哪些SSH版本具有该-W命令,哪些没有该命令?一点点谷歌搜索并没有很快为我带来答案...
dmh

-W是在2010年发布的OpenSSH 5.4中引入的。所以答案是肯定的@kasperd
0xC0000022L

7

从OpenSSH 7.3(2016年末)开始,最简单的方法是ProxyJump设置。在您的~/.ssh/config

Host B
  ProxyJump A

或在命令行上,-J B

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.