我有一台主机需要部署在一个网络上,一段时间内我将无法物理访问该主机,因此我使用 cron 和以下脚本从指南中建立了持久的反向 ssh 连接:
#!/bin/bash
# install with crontab -e
# */1 * * * * /root/scripts/ssh_tunnel.sh > tunnel.log 2>&1
createTunnel() {
/usr/bin/ssh -i /home/user/cert.pem -N -R 9999:localhost:22 [email protected]
if [[ $? -eq 0 ]]; then
echo Tunnel to jumpbox created successfully
else
echo An error occurred creating a tunnel to jumpbox. RC was $?
fi
}
/bin/pidof ssh
if [[ $? -ne 0 ]]; then
echo Creating new tunnel connection
createTunnel
fi
cron 任务非常简单:
crontab -e
*/1 * * * * /root/scripts/ssh_tunnel.sh > tunnel.log 2>&1
我需要 ssh 会话在发生中断时自动重新建立。目前,如果服务器上的 sshd 进程终止,客户端上的进程不会终止,因此脚本不会尝试建立新会话。
我注意到,当从交互式终端手动启动连接时,没有问题,也就是说,客户端在终止时与服务器端进程一起死亡。
任何帮助都将不胜感激,谢谢。