#!/bin/bash
sshcommand="ssh -N -R 20000:localhost:22 user@8.8.8.8"
result=`ps aux|grep $sshcommand"|grep -v grep`
if [ -z "$result" ]; then
echo "we are going to connect"
$sshcommand
else
echo "we are already connected"
fi
This is a handy script you can use and then add it to cron.
Save it as proxy.sh and add this to your cron (this will check every minute and start the SSH proxy if it is not running):
crontab -e
*1/ * * * * /home/user/proxy.sh
Server Side
What happens is that the connection breaks for some reason. Now your client will reconnect but it won't be able to listen on the port possibly because the server side still has the stale SSH process listening on your proxy port.
We need a script to check that the proxy port is open and SSH is accessible. If the port is open but we don't get served SSH then we will find the process for the port and kill it so a new, working connection can be made.
Put this into a cron as "checkproxy.sh":
#!/bin/bash
proxyport=20000
checkstatus=`nc -w 3 localhost $proxyport|grep -i openssh`
if [[ $checkstatus == *OpenSSH* ]]; then
echo "OK proxy is up and working"
else
# find the related sshd process
pid=`netstat -anptu|grep $proxyport|grep sshd|awk {'print $7'}|cut -d "/" -f 1`
echo "it is not working let's kill the process so the client can reconnect"
kill $pid
fi
ssh, persistent, login, proxy, bin, bash, sshcommand, quot, localhost, user, ps, aux, grep, z, echo, fi, cron, sh, crontab,