summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2010-09-22 20:39:40 +0200
committerJonas Smedegaard <dr@jones.dk>2010-09-22 20:39:40 +0200
commitd1771ec01091df8764736276960aa045cbdf888a (patch)
tree0bef191714e6ed14ac981844c31eda4ea1638d53
parent66b4364643a1228179e0b027556568e70678b943 (diff)
parent19812949f893bc516949264803d94978ea17b6f5 (diff)
Merge coreander:/srv/git/source.jones.dk/sbin
-rwxr-xr-xlocalautoautossh43
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