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

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

我目前正在使用 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 但这不是完整的解决方案。

答案1

这是我当前的解决方案,如果您知道更好的解决方案,我将很乐意接受它。

在初始化隧道的机器上:

/etc/cron.d/autossh
@reboot autossh -f -nNT -R 3269:host-providing:3269 firewalled-host &

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

答案2

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

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

一些 Linux 发行版已经转而使用 upstart 来管理 init 以前的工作(以及 upstart 的其他功能,因为它的功能比 init 更多)——您应该可以轻松找到大量关于此的文档。

相关内容