Skip to content

Instantly share code, notes, and snippets.

@zastari
Last active August 29, 2015 14:25
Show Gist options
  • Save zastari/59a9407da4cf3ef25ddb to your computer and use it in GitHub Desktop.
Save zastari/59a9407da4cf3ef25ddb to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# Usage: ${name} stop|start|status|help
#
# Manages an SSH tunnel between two servers. This script uses SSH sockets
# to multiplex a forwarded connection and allow interactive control of
# the tunnel
name="$(basename "${0}")"
LOCAL_PORT='4321'
TARGET_PORT='4242'
TARGET_HOST='172.30.0.196'
TARGET_USER='ap'
SSH_SOCKET="/var/run/${name}.sock"
SSH_KEY_FILE="${HOME}/.ssh/id_rsa"
ssh_target="${TARGET_USER}@${TARGET_HOST}"
running() {
[ -S "${SSH_SOCKET}" ] && \
ssh -S "${SSH_SOCKET}" -O check "${ssh_target}" > /dev/null 2>&1
}
usage() {
echo "${0} start|stop|status|help"
}
case "${1}" in
"start")
if ! running; then
[ -S "${SSH_SOCKET}" ] && rm -f "${SSH_SOCKET}"
ssh -M -S "${SSH_SOCKET}" -fNT -L \*:${LOCAL_PORT}:localhost:${TARGET_PORT} \
-o ServerAliveInterval=60 -o ExitOnForwardFailure=yes \
-i "${SSH_KEY_FILE}" "${ssh_target}"
[ $? -eq 0 ] && echo "${name} started"
else
echo "${name} is already running"
fi
;;
"stop")
if running; then
ssh -S "${SSH_SOCKET}" -O exit "${ssh_target}"
[ $? -eq 0 ] && echo "${name} stopped successfully"
fi
;;
"status")
if running; then
ssh -S "${SSH_SOCKET}" -O check "${ssh_target}"
else
echo "${name} is stopped"
fi
;;
"help")
usage
;;
*)
echo "Invalid Option: $1"
usage
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment