#!/usr/bin/env bash if [ -z "$SQL_CLI_TEMPLATE" ] then if [ $(uname -s) = "Linux" ] then SQL_CLI_TEMPLATE='mysql --protocol=TCP -u $MYSQL_USERNAME -p$MYSQL_PASSWORD -h localhost -P 6033' else SQL_CLI_TEMPLATE='open \"mysql://$MYSQL_USERNAME:$MYSQL_PASSWORD@localhost:6033\" -a \"Sequel Ace\"' fi else echo -e "Warning, custom client string:\n$SQL_CLI_TEMPLATE" read -r -p "Continue [Y/n] " CONTINUE if [[ ! $CONTINUE =~ "^[Yy]" ]] then exit fi fi [ -z $SQL_PROXY_HOST ] && SQL_PROXY_HOST="localhost" CONNECTION_CACHE="$HOME/.cache/sqlproxy_$SQL_PROXY_HOST" HELP="Usage: myssh [ls|connect]\n SUBCOMMANDS:\n ls: list available database hosts\n connect: connect to a database host\n disconnect: Quit existing ssh master session\n \n SYNTAX connect host [-u user] [-p password] [-c client] " ssh_status() { ssh -O check -S $HOME/.ssh/controlmasters/%r@%h:%p $SQL_PROXY_HOST > /dev/null 2>&1 echo $? } connect() { mkdir -p $HOME/.ssh/controlmasters if [ $(ssh_status) -ne 0 ] then echo "" > $CONNECTION_CACHE ssh -o "ControlPersist=10m" -M -S $HOME/.ssh/controlmasters/%r@%h:%p $SQL_PROXY_HOST q fi } disconnect() { if [ $(ssh_status) -eq 0 ] then ssh -O stop -S $HOME/.ssh/controlmasters/%r@%h:%p $SQL_PROXY_HOST q fi } port_forward() { ACTIVE_HOST=$(cat $CONNECTION_CACHE) if [ -z $ACTIVE_HOST ] || [ $ACTIVE_HOST != $1:$2 ] then if [ ! -z $ACTIVE_HOST ] then ssh -O cancel -L 6033:$ACTIVE_HOST -S $HOME/.ssh/controlmasters/%r@%h:%p ${SQL_PROXY_HOST} q fi echo $ACTIVE_HOST echo $1 $2 ssh -O forward -L 6033:$1:$2 -S ${HOME}/.ssh/controlmasters/%r@%h:%p ${SQL_PROXY_HOST} fi echo $2:$3 > "${CONNECTION_CACHE}" } ls_hosts() { ssh -S ${HOME}/.ssh/controlmasters/%r@%h:%p "${SQL_PROXY_HOST}" ls } get_host() { if [ $1 == '' ] then printf 'Please specify the host to connect to.\nRun "myssh ls" to list all available hosts.\n' else ssh -S ${HOME}/.ssh/controlmasters/%r@%h:%p "${SQL_PROXY_HOST}" "get $1" fi } set_host_env() { if [ $1 == 'mysql' | $1 == 'psql' ] then TARGET_HOST_TYPE=$1 fi if [ $2 != '' ] then fi } run_client() { $(eval echo $SQL_CLI_TEMPLATE) } MAIN_OPTION=$1 shift # ensure connection connect case $MAIN_OPTION in ls) ls_hosts;; connect) # check if host is valid TARGET_HOST=$1 shift while getopts "u:p:" o do case "$o" in u) MYSQL_USERNAME="$OPTARG" ;; p) MYSQL_PASSWORD="$OPTARG" ;; esac done TARGET_HOST_DATA="$(get_host "${TARGET_HOST}")" port_forward $TARGET_HOST_DATA # port_forward $TARGET_HOST # if [ ! -z $MYSQL_USERNAME ] && [ ! -z $MYSQL_PASSWORD ] # then # run_client # fi ;; disconnect) disconnect;; *) echo -e $HELP;; esac