我目前正在使用 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 更多)——您应该可以轻松找到大量关于此的文档。