我编写了以下脚本,cron 每 5 分钟运行一次。尽管我希望这可以工作,但我仍然发现连接一直不允许我从远程端进入。回答上面的评论 - 它似乎并没有从 netstat 中消失。我检查了 netstat,它仍然会为连接显示“ssh ESTABLISHED”,因此当我的脚本运行时,我得到“套接字似乎已连接。假设反向 ssh 隧道运行良好”的结果。必须有更好的方法来测试远程端并获得表明它正在工作的结果?
#!/bin/bash
#$Id: ssh_reverse_tunnel.sh 14 2012-10-13 22:53:21Z root $
REMOTE_USER="user"
REMOTE_DOMAIN="domain"
SOCKETS_USED=`netstat -p ssh | grep 'ssh ESTABLISHED' | grep -c $(host $REMOTE_DOMAIN | awk {'print $NF'})`
establish_connecton() {
echo "establishing reverse ssh tunnel connection..."
ssh -R 12222:localhost:22 -R12223:localhost:5901 -f -N -T ${REMOTE_USER}@${REMOTE_DOMAIN} &
echo "done."
echo
exit
}
if [ $(ps -ef | grep "ssh -R 12222" | grep -v grep | wc -l) == 0 ]; then
echo "no reverse ssh tunnel connection exists."
establish_connecton
fi
if [ "$SOCKETS_USED" -lt 1 ]; then
echo "no reverse ssh tunnel sockets are connected. nuking stale pids and re-establishing connection"
# check for stale pids and kill them if found.
if [ $(ps -ef | grep "ssh -R 12222" | grep -v grep | wc -l) -gt 0 ]; then
# stale pids exist, kill them...
ps -ef | grep "ssh -R 12222" | grep -v grep | awk {'print $2'} | \
while read PID; do
echo "kill -9 $PID"
done
fi
establish_connecton
else
echo "sockets appear connected. assuming reverse ssh tunnel is running fine."
fi
希望有人发现上述内容有用,并可以让我知道在哪里进行更多检查。