如何使用 ssh 创建持久端口转发?

sor*_*rin 4 port-forwarding

我目前正在使用 ssh 转发几个这样的端口:

有3台机器:

  • A-host- 建造隧道的机器,可以同时访问B和访问C
  • B-host - 无权访问需要能够连接到的 A 或 C 的机器 C:636
  • C-host - 在端口 636 上提供服务的机器

A-host>ssh -R 636:C-host:636 -R 8080:C-host:8080 root@B-host

问题是如何使这种隧道持久化,即使一台或另一台机器重新启动也能恢复它。

我知道这可能需要 autossh 但这不是整个解决方案。

sor*_*rin 6

这是我目前的解决方案,如果您知道更好的解决方案,我会接受它。

在初始化隧道的机器上:

/etc/cron.d/autossh
@reboot autossh -f -nNT -R 3269:host-providing:3269 firewalled-host &
Run Code Online (Sandbox Code Playgroud)

现在防火墙主机可以连接到 localhost:3269 来访问以前不可用的服务。


Dav*_*ett 4

autossh命令添加到管理系统服务的服务中。

大多数 Linux 设置都使用 init,读取从什么开始的配置/etc/inittab,类似这样的一行rc:2:respawn:autossh <options> >>/var/log/autosshoutput 2>&1就可以解决问题。这将(如果您处于运行级别 2,这是目前正在运行的 Linux 系统的常见情况)在启动时启动该进程,并在进程终止时重新启动它。如果您希望它在下次重新启动之前启动,请运行telinit告诉 init 进程重新读取其配置。inittab有关更多详细信息,请参阅手册页。

一些 Linux 发行版已经转而使用 upstart 来管理 init 曾经使用的功能(在 upstart 的其他功能中,因为它比 init 做得更多)——您应该很容易找到大量关于这方面的文档。