Semi working myssh script.
This commit is contained in:
parent
0f8b7b0530
commit
b215663184
1 changed files with 102 additions and 36 deletions
138
script/myssh
138
script/myssh
|
@ -1,24 +1,7 @@
|
|||
#!/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"
|
||||
set -e
|
||||
SQL_PROXY_HOST="${SQL_PROXY_HOST:-localhost}"
|
||||
CONNECTION_CACHE="$HOME/.cache/sqlproxy_${SQL_PROXY_HOST}"
|
||||
|
||||
HELP="Usage: myssh [ls|connect]\n
|
||||
SUBCOMMANDS:\n
|
||||
|
@ -29,6 +12,26 @@ SUBCOMMANDS:\n
|
|||
SYNTAX connect host [-u user] [-p password] [-c client]
|
||||
"
|
||||
|
||||
get_template_string() {
|
||||
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
|
||||
printf '%s' "${SQL_CLI_TEMPLATE}"
|
||||
}
|
||||
|
||||
ssh_status() {
|
||||
ssh -O check -S $HOME/.ssh/controlmasters/%r@%h:%p $SQL_PROXY_HOST > /dev/null 2>&1
|
||||
echo $?
|
||||
|
@ -51,9 +54,13 @@ disconnect() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Establishes a port forward to the target host
|
||||
# args:
|
||||
# $1 - target ip
|
||||
# $2 - target port
|
||||
port_forward() {
|
||||
ACTIVE_HOST=$(cat $CONNECTION_CACHE)
|
||||
if [ -z $ACTIVE_HOST ] || [ $ACTIVE_HOST != $1:$2 ]
|
||||
if [ -z $ACTIVE_HOST ] || [ $ACTIVE_HOST != "$1:$2" ]
|
||||
then
|
||||
if [ ! -z $ACTIVE_HOST ]
|
||||
then
|
||||
|
@ -63,7 +70,7 @@ port_forward() {
|
|||
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}"
|
||||
echo "$1:$2" > "${CONNECTION_CACHE}"
|
||||
}
|
||||
|
||||
ls_hosts() {
|
||||
|
@ -71,27 +78,87 @@ ls_hosts() {
|
|||
}
|
||||
|
||||
get_host() {
|
||||
if [ $1 == '' ]
|
||||
if [ $1 = '' ]
|
||||
then
|
||||
printf 'Please specify the host to connect to.\nRun "myssh ls" to list all available hosts.\n'
|
||||
exit 1
|
||||
else
|
||||
ssh -S ${HOME}/.ssh/controlmasters/%r@%h:%p "${SQL_PROXY_HOST}" "get $1"
|
||||
TARGET_HOST_DATA=$(ssh -S ${HOME}/.ssh/controlmasters/%r@%h:%p "${SQL_PROXY_HOST}" "get $1")
|
||||
if [ "${TARGET_HOST_DATA}" = '' ]
|
||||
then
|
||||
printf 'No such host: "%s"\n' $1
|
||||
exit 1
|
||||
else
|
||||
printf "%s" "${TARGET_HOST_DATA}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks and sets sql login variables
|
||||
# args:
|
||||
# $1 - sql type (mysql or psql)
|
||||
# $2 - target ip
|
||||
# $3 - target port
|
||||
# $4 - username (optional)
|
||||
# $5 - password (optional)
|
||||
set_host_env() {
|
||||
if [ $1 == 'mysql' | $1 == 'psql' ]
|
||||
if [ $1 = 'mysql' ] || [ $1 = 'psql' ]
|
||||
then
|
||||
TARGET_HOST_TYPE=$1
|
||||
else
|
||||
printf 'Invalid Database type: "%s"\n' $1
|
||||
exit 1
|
||||
fi
|
||||
if [ $2 != '' ]
|
||||
then
|
||||
|
||||
TARGET_HOST_IP=$2
|
||||
else
|
||||
printf 'No Host IP given.\n'
|
||||
exit 1
|
||||
fi
|
||||
if echo $3 | grep -q '[0-9]\+'
|
||||
then
|
||||
TARGET_HOST_PORT=$3
|
||||
else
|
||||
printf 'Invalid Host Port "%s" given.\n' "$3"
|
||||
fi
|
||||
if [ -z "${TARGET_HOST_USERNAME}" ] && [ -n $4 ]
|
||||
then
|
||||
TARGET_HOST_USERNAME=$4
|
||||
fi
|
||||
if [ -z "${TARGET_HOST_PASSWORD}" ] && [ -n $5 ]
|
||||
then
|
||||
TARGET_HOST_PASSWORD=$5
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# Runs the sql client for an active connection
|
||||
# args:
|
||||
# $1 - sql type (mysql or psql)
|
||||
# $2 - username
|
||||
# $3 - password
|
||||
run_client() {
|
||||
$(eval echo $SQL_CLI_TEMPLATE)
|
||||
if [ "$1" = 'mysql' ]
|
||||
then
|
||||
if which ace >/dev/null 2>&1
|
||||
then
|
||||
ace
|
||||
elif which mysql >/dev/null 2>&1
|
||||
then
|
||||
mysql --protocol=TCP -u "$2" -p"$3" -h "${SQL_PROXY_HOST}" -P 6033
|
||||
else
|
||||
SHOW_CLI_HELP=true
|
||||
fi
|
||||
elif [ "${$1}" = 'psql' ]
|
||||
then
|
||||
SHOW_CLI_HELP=true
|
||||
fi
|
||||
|
||||
if [ "${SHOW_CLI_HELP}" = true ]
|
||||
then
|
||||
printf 'No %s client binary found.\nYou can maually establish a connection using the following data.\nhost:\t%s\nport:\t6033\nuser:\t%s\npassword:\t%s\n' "$1" "${SQL_PROXY_HOST}" '3306' "$2" "$3"
|
||||
fi
|
||||
}
|
||||
|
||||
MAIN_OPTION=$1
|
||||
|
@ -110,17 +177,16 @@ case $MAIN_OPTION in
|
|||
while getopts "u:p:" o
|
||||
do
|
||||
case "$o" in
|
||||
u) MYSQL_USERNAME="$OPTARG" ;;
|
||||
p) MYSQL_PASSWORD="$OPTARG" ;;
|
||||
u) TARGET_HOST_USERNAME="$OPTARG" ;;
|
||||
p) TARGET_HOST_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
|
||||
set_host_env $(get_host "${TARGET_HOST}")
|
||||
port_forward "${TARGET_HOST_IP}" "$TARGET_HOST_PORT"
|
||||
if [ -n "${TARGET_HOST_USERNAME}" ] && [ -n "${TARGET_HOST_PASSWORD}" ]
|
||||
then
|
||||
run_client "${TARGET_HOST_TYPE}" "${TARGET_HOST_USERNAME}" "${TARGET_HOST_PASSWORD}"
|
||||
fi
|
||||
;;
|
||||
disconnect)
|
||||
disconnect;;
|
||||
|
|
Loading…
Reference in a new issue