是否可以将通过某个端口传入的ssh请求转发到另一台计算机?

时间:2020-03-05 18:48:02  来源:igfitidea点击:

我的局域网很小。外界仅可使用其中一台机器(这不容易更改)。我希望能够进行设置,以使不在标准端口上出现的ssh请求可以转到另一台计算机。这可能吗?如果是这样,怎么办?

哦,所有这些机器都在运行Ubuntu或者OSX。

解决方案

回答

我们可以使用"端口转发"来执行此操作。在这里看看:

http://portforward.com/help/portforwarding.htm

在此页面上,有关于如何设置路由器以端口转发请求的说明:

http://www.portforward.com/english/routers/port_forwarding/routerindex.htm

回答

另一种方法是使用ssh隧道(发生在客户端)。

我们可以这样执行ssh命令:

ssh -L 8022:myinsideserver:22 paul@myoutsideserver

这会将我们连接到可从外部访问的计算机(myoutsideserver),并通过该ssh连接创建一条隧道,该隧道连接到服务器上只能从内部访问的端口22(标准ssh端口)。

然后,我们将执行另一个这样的ssh命令(使第一个命令保持连接状态):

ssh -p 8022 paul@localhost

与本地主机上的8022端口的连接将通过第一个ssh连接建立隧道,从而使我们接管myinsideserver。

可能需要在myoutsideserver上做一些事情才能允许ssh端口转发。我正在仔细检查。

编辑

嗯ssh联机帮助页上说:**只有超级用户才能转发特权端口。 **

这对我来说意味着第一个ssh连接必须是root用户。也许其他人可以澄清这一点。

只要转发的端口(在本例中为8022)不是特权端口(如22),就好像不需要超级用户特权。感谢澄清麦克·斯通。

回答

@马克·比克

我原本要这么说,但是你击败了我!无论如何,我只想补充一下-R选项:

ssh -R 8022:myinsideserver:22 paul@myoutsideserver

区别在于我们要连接到/从哪个机器。我的老板不久前向我展示了这个技巧,很高兴知道...我们在防火墙后面,需要提供对计算机的外部访问...他通过ssh -R解决了另一台计算机的问题可以访问...,然后将与该计算机的连接转发到防火墙后面的计算机中,因此我们需要根据所用的计算机和将其连接到的计算机来使用-R或者-L。

另外,我很确定只要我们转发的端口(在这种情况下为8022端口)不低于限制范围(我认为是1024,但我可能会误解),我们就可以使用普通用户,因为这些是"保留的"端口。没关系将其转发到"受限"端口,因为该端口没有打开(机器只是通过隧道向它发送流量,它不知道该隧道),所以8022端口是是开放的,因此受到限制。

编辑:请记住,只有初始ssh保持打开状态,隧道才打开,因此,如果超时或者退出,则隧道将关闭。

回答

(在此示例中,我假设端口2222将进入内部主机。$ externalip和$ internalip分别是可见计算机和内部计算机的IP地址或者主机名。)

我们有两种选择,具体取决于我们希望代理的永久性:

  • 某种TCP代理。在Linux上,基本思想是在处理传入数据包之前,我们需要更改其目的地,即预路由目标NAT:iptables -t nat -A PREROUTING -p tcp -i eth0 -d $ externalip --dport 2222 --sport 1024:65535 -j DNAT --to $ internalip:22
  • 然后从外部世界获取:ssh -p 2222 $ externalip

请注意,"内部"和"外部"计算机不必位于同一局域网中。我们可以通过这种方式在全球范围内进行移植。

  • 从外部世界来看,用户执行:ssh $ externalip internalhost,一旦登录到第一台计算机,他们将立即转发到内部计算机。

这种方法的另一个优点是,人们不会遇到密钥管理问题,因为在一个IP地址上运行两个SSH服务会使SSH客户端生气。

仅供参考,如果我们想通过SSH连接到服务器并且不想担心密钥,请执行此操作

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

我的外壳中有一个别名" nossh",因此我可以执行" nossh somehost"操作,它将忽略所有关键错误。只需了解我们在执行此操作时就会忽略安全性信息,因此存在理论上的风险。

这些信息大部分来自我在曼谷Barcamp进行的一次有关奇特SSH技巧的演讲。我们可以看到我的幻灯片,但我建议使用文本版本,因为S5幻灯片有点马车。请查看"任何转发:简单端口转发"部分以获取信息。还提供有关使用OpenSSH创建SOCKS5代理的信息。是的,你可以这么做。这样的OpenSSH太棒了。

(最后,如果我们要大量遍历内部网络,请考虑设置VPN。这听起来很吓人,但是OpenVPN非常简单并且可以在所有OS上运行。我想说,这对于SSH来说是过大的;但是一旦开始通过端口转发进行端口转发以使VNC,HTTP或者其他事件发生;或者,如果我们有很多内部主机需要担心,它可以更简单,更易于维护。)

回答

在Ubuntu中,我们可以安装Firestarter,然后使用其转发服务功能从计算机上的非标准端口转发SSH流量,并通过外部访问网络内部计算机上的端口22.

在OS X上,我们可以编辑/etc/nat/natd.plist文件以启用端口转发。

回答

在不弄乱防火墙规则的情况下,我们可以设置〜/ .ssh / config文件。

假设10.1.1.1是"网关"系统,而10.1.1.2是"客户端"系统。

Host gateway
  Hostname 10.1.1.1 
  LocalForward 8022 10.1.1.2:22 

Host client
  Hostname localhost
  Port 8022

我们可以通过以下方式打开与"网关"的ssh连接:

ssh gateway

在另一个终端中,打开与客户端的连接。

ssh client