Search code examples
linuxsshcrontunnel

reverse ssh tunnel


I have an embedded device sitting out in the field, connected through a USB cell stick to the Internet. In order to be able to reach it, I establish a reverse ssh tunnel on port 19996 to my home PC to be able to access it.

Now I re-establish that tunnel every 10min (by cron), to make sure I have pretty much uninterrupted access, even when the provider decides to change my IP.

Now I realized that my process list is full of

"4383 root     ssh -R 19996:localhost:22 -f -N user@host"

and netstat is loaded up with connections as well. How can I ensure this doesn't happen? I only need one tunnel open at a time, not 100s of them.


Solution

  • I wrote up followiung shell script which seems to work fine!

    #!/bin/sh
    RETVAL=`netstat | grep 'S0106b0487afe2a57'| grep -c 'ssh ESTABLISHED'`
    echo "${RETVAL} open tunnel(s)"
    if [ "$RETVAL" -lt "1" ]
      then
            echo "starting reverse ssh tunnel"
            `ssh -R 19999:localhost:22 -f -N user@host`
            echo "done"
    fi