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

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

有3台机器:

  • A-host – build设隧道,一个可以访问BC
  • B-host – 无法访问需要连接到C:636 A或C的机器
  • C-host – 在端口636上提供服务的机器

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

问题是如何使这个隧道是持久的,即使重启一台或另一台机器也能恢复。

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

这是我目前的解决scheme,如果你知道一个更好的解决scheme,我会接受它。

在初始化隧道的机器上:

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

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

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

大多数Linux设置使用init,从/etc/inittab读取configuration,像rc:2:respawn:autossh <options> >>/var/log/autosshoutput 2>&1就行。 这将会(如果你在runlevel 2这是运行的Linux系统通常情况下这些天)开始启动过程,并重新启动它,如果它死了。 如果你希望它在下一次重启之前启动,运行telinit告诉init进程重新读取它的configuration。 有关更多详细信息,请参见inittab的手册页。

一些Linux发行版已经开始使用新手来pipe理init所使用的内容(其中新发行的其他function,因为它已经做过更多的工作) – 你应该很容易地find大量的文档。