N autossh 隧道的守护进程

N autossh 隧道的守护进程

我使用 autossh 创建从本地主机到远程主机的持久隧道。

手动启动 autossh 没问题,但如果 localhost 重新启动,隧道就会消失。这并不奇怪。

如何创建一个守护进程以在本地主机重启后重新打开大约 20 条隧道?

服务器:支持 systemd 的 Linux

答案1

我找到了一个用于启动 autossh 守护进程的 systemd 文件。在我的例子中,我需要创建 N 个这样的文件:

[Unit]
Description=Keeps a tunnel to 'remote.example.com' open
After=network.target

[Service]
User=autossh
# -p [PORT]
# -l [user]
# -M 0 --> no monitoring
# -N Just open the connection and do nothing (not interactive)
# LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -p 22 -l autossh remote.example.com -L 7474:127.0.0.1:7474 -i /home/autossh/.ssh/id_rsa

[Install]
WantedBy=multi-user.target

来源:https://gist.github.com/thomasfr/9707568

答案2

添加您通常运行的任何命令,并在其末尾/etc/rc.local添加一个。&

答案3

我们用于monit本地监控/管理服务器上的各种进程。要autossh使用 管理实例monit,请安装monit包并创建配置文件/etc/monit/conf.d/autossh.conf

check process autossh1 pidfile "/tmp/autossh1.pid"
  start program = "/bin/bash -c 'export AUTOSSH_PIDFILE=/tmp/autossh1.pid; autossh -f [email protected]'" as uid user1 and group group1
  stop program = "/bin/bash -c 'kill `cat /tmp/autossh1.pid`'"
  group autossh

然后使用 重新启动 monit sudo service monit restart

如果您想以 root 身份运行该进程,您可以省略行as uid user1 and group group1尾的start program =

monit将定期检查进程是否正在运行,并在需要时重新启动它。您可以显示 monit 管理的进程的状态:

monit summary

您还可以通过运行以下命令轻松停止/启动该进程

monit stop autossh1
monit start autossh1

您甚至可以创建组(如下行所示group autossh),然后停止/启动整个组:

monit stop -g autossh
monit start -g autossh

顺便说一下,monit命令行工具使用 HTTP 与守护进程进行通信。要使通信正常工作,您需要在 中包含以下内容/etc/monit/monitrc

set httpd port 2812 and
    use address localhost  # only accept connection from localhost
    allow localhost        # allow localhost to connect to the server

希望有所帮助。

相关内容