我有一个 bash 脚本,用于检查 ssh 连接lsof
。如果连接断开,它会再次打开它。
我找到了一些有关如何创建定期启动的服务的信息,但问题是,每当它启动服务并运行ssh
连接时,服务退出后该连接就会终止。
我知道有一个选项,但是执行后RemainAfterExit=yes
它将保持服务状态。active
简而言之:
- 我想定期启动 bash 脚本
- 脚本检查 ssh
- 如果隧道关闭,它将启动它(并将其保留在系统中)
- 服务需要再次启动,运行脚本进行 ssh 检查
我的服务配置:
[Unit]
Description=Periodically check for ssh tunnel
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=30
User=root
ExecStart=/bin/bash /opt/script.sh -s
[Install]
WantedBy=sysinit.target
编辑:
在我的带有 -s 参数的脚本中,我只是调用函数来检查是否为特定地址建立了 ssh 隧道,如果没有,它就会使用标准 ssh 打开它。
if [[ $(sudo lsof -i -n | egrep '\<ssh\>' | grep "$ip" | wc -l) -gt 0 ]]; then
INFO "Tunnel is established for IP "$ip"."
exit 0
else
ERROR "Tunnel for IP "$ip" has been disconnected. Trying to reconnect."
ssh -fN [email protected]
fi