Many of the hosts I wish to use my ssh-and-tmux script to connect to are behind firewalls so I can't connect to them directly. I find that it is more reliable to just ssh through a gateway host rather than using any VPN that might be available. This can easily be bolted on to the ssh-and-tmux script provided a good guess can be made as to which network you're actually on:
#!/bin/sh
if [ -n "$TMUX" ]; then
echo Already in tmux
exit 1
fi
if [ -n "$STY" ]; then
echo Already in screen
exit 1
fi
while true; do
# First work out where we are based on our IP address.
# We do this every time round the loop in case we've
# moved network since last time.
addrs=`ip --family inet --oneline addr`
work_via=gateway.example.com
home_via=gateway.randombitsofuselessinformation.blogspot.com
case "$addrs" in
*192.168.1.*)
# We're on the home network
home_via=
;;
*172.16.*)
# We're on the work network
work_via=
;;
esac
extra=
via=
case "$1" in
work-host1)
via=$work_via
# Add a port forward for this host too
extra=-L8080:work-host1:8080
dest=work-host1
;;
home-host1)
via=$home_via
dest=home-host1
;;
home-host2)
via=$home_via
dest=home-host2
;;
*.*)
# Hosts with dots are assumed to be on the
# Internet at large
via=
dest="$1"
;;
*)
# All other hosts are assumed to be on the work
# network
via=$work_via
dest="$1"
;;
esac
if [ -n "$via" ]; then
ssh $extra -A -t "$via" \
ssh -t "$dest" "tmux -2 -L netbook attach \
|| tmux -2 -L netbook"
else
ssh $extra -t "$dest" "tmux -2 -L netbook attach \
|| tmux -2 -L netbook"
fi
stty sane
echo "Dropped, press Enter to reconnect."
if read x; then
echo "Reconnecting..."
else
# Something bad happened to our tty. We'd better exit.
exit 1
fi
done
So now I can connect to work-host1 from home via the gateway, shut the laptop, travel to work, open it again, hit Enter and reconnect directly to work-host1 without losing any state. What's not to like? Well, there's still some more things we can do.
No comments:
Post a Comment