#SSH Tunnel manager # # Starts and kills SSH tunnels # *** ssh command explained *** # -S : The control socket, it's used to monitor the ssh connection # -M : Mandatory for the use of -S (indicates that this connection is the master). If -M is not specified, ssh looks for the socket of the master connection to attach this ssh session as a slave. # -N : Don't execute commande # -f : Go to background (but allow ssh to ask for passwd, that's the difference from a shell &) # -O : Command line for socket # -L : Local port forwarding connect () { ssh -M -S ~/.tunnel_${2}.sock -f user@host -L $1 -N && echo "Tunnel $2 started successfully" || echo "Tunnel $2 failed to start" } disconnect () { case $1 in d|t|q) ssh -S ~/.tunnel_${1}.sock -O exit user@host;; *) "Unknown target"; exit 1;; esac } case $1 in d) connect "<local_port_d>:target_d.tld:<remote_port_d>" "d";; t) connect "<local_port_t>:target_t.tld:<remote_port_t>" "t";; q) connect "<local_port_q>:target_q.tld:<remote_port_q>" "q";; -k) disconnect $2;; -h|--help) echo "tunnel.sh [-K] <target in [dtq]>"; exit 0;; *) echo "Unknown target"; exit 1;; esac