Project owner: | Overdrive |
Interested: | |
Related: | [Project Single Boards] |
References: | http://www.tunnelsup.com/raspberry-pi-phoning-home-using-a-reverse-remote-ssh-tunnel |
Materials: | dynamic IP device aka PICKA, static IP device aka RemoteHost, ssh able to connect between devices by keys |
THX to: | thx to: Jack Rhysider; @TunnelsUp; http://www.tunnelsup.com/raspberry-pi-phoning-home-using-a-reverse-remote-ssh-tunnel |
License: | CC Attribution-Share Alike 3.0 Unported |
ssh -N -R 2222:localhost:22 serverUser@RemoteHost
explanation of parameters of tunnel: ssh - shell command -N do not execute anything when connection successful -R bind port 22 on remote server [192.168.1.1] to 2222
ssh -l pickaUser -p 2222 localhost
Why did this work? The RemoteHost is listening on port 2222 for incoming ssh connections. If it receives one, it will forward all traffic it receives into the previous ssh connection that was established already. That is essentially what the remote tunnel does.
Now let’s take a step back and look at what we’ve done. When the Raspberri Pi is on, it will check every minute to see if an ssh connection to your linux server exists. If it doesn’t it will create one. The tunnel it creates is really a reverse remote tunnel. Once the tunnel is up, anyone who ssh’s into port 2222 of the linux server will then be redirected to the Pi. Incredible!
touch ~/ssh_tunnel.sh chmod 700 ~/ssh_tunnel.sh vim ~/ssh_tunnel.sh
#!/bin/bash -x createTunnel() { ##### fill in vars RemoteHost="IP_HERE" ServerUser="NICK_HERE" ##### are wars filled? /usr/bin/ssh -N -R 2222:localhost:22 ${ServerUser}@${RemoteHost} & if [[ $? -eq 0 ]]; then echo Tunnel to RemoteHost IP: ${RemoteHost} created successfully else echo An error occurred creating a tunnel to RemoteHost IP: ${RemoteHost}. ReturnCode was: ${?} fi } /bin/pidof ssh if [[ ${?} -ne 0 ]]; then echo Creating new tunnel connection to RemoteHost IP: ${RemoteHost} createTunnel fi
crontab -e
*/1 * * * * ~/ssh_tunnel.sh > ~/ssh_tunnel.log 2>&1
* in case you have problem, that wiifi is turned off when screensaver is on * remember en1 should be replaced by your wiifi interface
cd /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources sudo ./airport en1 prefs DisconnectOnLogout=NO