我使用 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
答案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
希望有所帮助。