diff options
author | Jonas Smedegaard <dr@jones.dk> | 2010-09-22 20:39:40 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2010-09-22 20:39:40 +0200 |
commit | d1771ec01091df8764736276960aa045cbdf888a (patch) | |
tree | 0bef191714e6ed14ac981844c31eda4ea1638d53 /localautoautossh | |
parent | 66b4364643a1228179e0b027556568e70678b943 (diff) | |
parent | 19812949f893bc516949264803d94978ea17b6f5 (diff) |
Merge coreander:/srv/git/source.jones.dk/sbin
Diffstat (limited to 'localautoautossh')
-rwxr-xr-x | localautoautossh | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/localautoautossh b/localautoautossh new file mode 100755 index 0000000..b669e1d --- /dev/null +++ b/localautoautossh @@ -0,0 +1,43 @@ +#!/bin/sh + +# Wrapper around autossh to always keep open ssh and web tunnels +# Usable as cronjob and ifup hook + +set -e + +DEFAULTS=/etc/local/autoautossh +DAEMON=/usr/bin/autossh + +# Set defaults +DEFAULTLOCALUSER=autossh +DEFAULTLOCALIFACE=eth0 +DEFAULTREMOTEHOST=defaultserver +DEFAULTREMOTESSHPORT=2200 +DEFAULTREMOTEHTTPPORT=2280 + +# Check for daemon presence +[ -x "$DAEMON" ] || exit 0 + +# Include config defaults if available +[ -r "$DEFAULTS" ] && . "$DEFAULTS" + +# allow overriding these in environment +LOCALUSER=${LOCALUSER:-$DEFAULTLOCALUSER} +LOCALIFACE=${LOCALIFACE:-$DEFAULTLOCALIFACE} +REMOTEHOST=${REMOTEHOST:-$DEFAULTREMOTEHOST} +REMOTESSHPORT=${REMOTESSHPORT:-$DEFAULTREMOTESSHPORT} +REMOTEHTTPPORT=${REMOTEHTTPPORT:-$DEFAULTREMOTEHTTPPORT} + + +# ifup hack: Ignore ifup'ing irrelevant interfaces (including loopback) +# Unset LOCALIFACE to always continue +[ -z "$LOCALIFACE" ] || [ -z "$IFACE" ] || [ "$IFACE" = eth0 ] || exit 0 + +# Back out if possible to reach ourselves from outside +! su "$LOCALUSER" -c "ssh '$REMOTEHOST' -- ssh -C -o ConnectTimeout=5 -o ConnectionAttempts=3 -p '$REMOTESSHPORT' localhost -- true" || exit 0 + +# SSH tunnel is broken - establish fresh tunnels +killall autossh || true +su "$LOCALUSER" -c "autossh -fN -M 0 -o BatchMode=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -R '$REMOTESSHPORT':localhost:22 -R '$REMOTEHTTPPORT':localhost:80 '$REMOTEHOST'" & + +exit 0 |