Archived
1
0

13 Commits
0.0.1 ... 0.1.0

Author SHA1 Message Date
f938fd4d5b Add startall and stopall 2025-08-24 19:40:37 +02:00
759e7412c3 Add startall and stopall 2025-08-24 19:36:55 +02:00
1dfd3f090f Add status command 2025-08-24 05:08:13 +02:00
98542abb36 Add status command 2025-08-24 05:05:02 +02:00
412744520e Add status command 2025-08-24 04:41:17 +02:00
b95b557fc1 Update show Help 2025-08-24 04:08:11 +02:00
4ae4fc5e07 Sanitarise input 2025-08-22 03:43:50 +02:00
ac5d6f6cf6 output issue 2025-08-22 03:25:55 +02:00
2d30be9cf9 refactor 2025-08-22 03:22:22 +02:00
58e086416b refactor 2025-08-22 02:50:53 +02:00
e978d05450 Clean code 2025-08-22 02:45:28 +02:00
8448282afa Indent 2025-08-22 01:58:38 +02:00
0d5cf8f506 Add bash completion 2025-08-21 03:46:04 +02:00
2 changed files with 172 additions and 84 deletions

View File

@@ -1,23 +1,24 @@
#!/bin/bash #!/bin/bash
function showHelp() { function showHelp() {
echo "ssh-proxy [args] command proxy" echo "ssh-proxy [args] command cmd_args"
echo "" echo ""
echo "args :" echo "args :"
echo " --help Show help" echo " --help Show help"
echo "command;" echo "command :"
echo " status"
echo " start profile|port target" echo " start profile|port target"
echo " stop profile|port target" echo " stop port"
#echo " stop profile|port target|tmpFile" echo " startall"
echo "proxy:" echo " stopall"
echo "cmd_args :"
echo " profile Name of the profile (~/.config/ssh-proxy/*)" echo " profile Name of the profile (~/.config/ssh-proxy/*)"
echo " port Proxy local port" echo " port Proxy local port (1024-65535)"
echo " target Proxy target [user@]server[:port]" echo " target Proxy target [user@]server[:port]"
#echo " tmpFile Proxy instance pid file (/tmp/ssh-proxy/*)"
} }
if [ "${1}" == "" ]; then if [ "${1}" == "" ]; then
showHelp showHelp
exit 1 exit 1
fi fi
case ${1} in case ${1} in
@@ -25,107 +26,123 @@ case ${1} in
showHelp showHelp
exit 0 exit 0
;; ;;
"start" | "stop");; "status" | "startall" | "stopall");;
"start" | "stop")
if [ "${2}" == "" ] || [[ "${2}" == */* ]]; then
showHelp
exit 1
fi
;;
*) *)
showHelp showHelp
exit 1 exit 1
;; ;;
esac esac
if [ "${2}" == "" ]; then
showHelp
exit 1
fi
LOCAL_PORT=0 function showProxyStatus() {
PROXY="" if [ -d /tmp/ssh-proxy-"${USER}" ] && [ "$(find /tmp/ssh-proxy-"${USER}" -maxdepth 0 -empty -exec echo 1 \;)" == "" ]; then
echo -e "Port\tProxy"
if [ "${3}" == "" ]; then for FILE in /tmp/ssh-proxy-"${USER}"/*; do
#echo "Use Profile - ${2}" PORT=$(basename "${FILE}")
##echo "Use Profile or tmpFile - ${2}" PROXY=$(grep 'PROXY=' "${FILE}" | sed 's/PROXY=//')
PROFILE_NAME=${2} echo -e "${PORT}\t${PROXY}"
PROFILE_FILE=~/.config/ssh-proxy/${2} done
if [ ! -f "${PROFILE_FILE}" ]; then else
echo "Error: Profile doesn't exist" echo "No open proxy"
exit 1
fi fi
LOCAL_PORT=$(grep 'PORT=' "${PROFILE_FILE}" | sed 's/PORT=//') }
PROXY=$(grep 'PROXY=' "${PROFILE_FILE}" | sed 's/PROXY=//')
else
# echo "Use args - ${2} ${3}"
LOCAL_PORT="${2}"
PROXY="${3}"
fi
if [[ ! ${LOCAL_PORT} =~ ^[0-9]+$ ]] || [[ ! ${LOCAL_PORT} -lt 65536 ]]; then
echo "Port is not valid (1024-65535)"
exit 1
fi
PROXY_USER=""
#PROXY_PASSWORD=""
PROXY_SERVER=""
PROXY_SERVER_PORT="22"
if [[ "${PROXY}" == *@* ]]; then
PROXY_USER="${PROXY%@*}"
PROXY_SERVER="${PROXY#*@*}"
else
PROXY_SERVER="${PROXY}"
fi
#if [[ "${PROXY_USER}" == *:* ]]; then
# PROXY_PASSWORD="${PROXY_USER#*:*}"
# PROXY_USER="${PROXY_USER%:*}"
#fi
if [[ "${PROXY_SERVER}" == *:* ]]; then
PROXY_SERVER_PORT="${PROXY_SERVER#*:*}"
PROXY_SERVER="${PROXY_SERVER%:*}"
fi
# Debug Point
#echo "PROXY_USER: ${PROXY_USER}"
##echo "PROXY_PASSWORD: ${PROXY_PASSWORD}"
#echo "PROXY_SERVER: ${PROXY_SERVER}"
#echo "PORT: ${PROXY_SERVER_PORT}"
TMP_FILE=/tmp/ssh-proxy-$(whoami)/proxy-${LOCAL_PORT}-${PROXY_USER}@${PROXY_SERVER}
# Debug Point
#echo "${TMP_FILE}"
if [ ! -d /tmp/ssh-proxy-"${USER}" ]; then
mkdir /tmp/ssh-proxy-"${USER}"
fi
function startProxy() { function startProxy() {
LOCAL_PORT=0
PROXY=""
if [ "${2}" == "" ]; then
#echo "Use Profile - ${1}"
#PROFILE_NAME=${1}
PROFILE_FILE=~/.config/ssh-proxy/${1}
if [ ! -f "${PROFILE_FILE}" ]; then
echo "Error: Profile doesn't exist"
exit 1
fi
LOCAL_PORT=$(grep 'PORT=' "${PROFILE_FILE}" | sed 's/PORT=//')
PROXY=$(grep 'PROXY=' "${PROFILE_FILE}" | sed 's/PROXY=//')
else
# echo "Use args - ${1} ${2}"
LOCAL_PORT="${1}"
PROXY="${2}"
fi
if [[ ! ${LOCAL_PORT} =~ ^[0-9]+$ ]] || [[ ! ${LOCAL_PORT} -lt 65536 ]]; then
echo "Port is not valid (1024-65535)"
exit 1
fi
PROXY_USER=""
#PROXY_PASSWORD=""
PROXY_SERVER=""
PROXY_SERVER_PORT="22"
PROXY_ADDRESS=""
if [[ "${PROXY}" == *@* ]]; then
PROXY_USER="${PROXY%@*}"
PROXY_SERVER="${PROXY#*@*}"
else
PROXY_SERVER="${PROXY}"
fi
#if [[ "${PROXY_USER}" == *:* ]]; then
# PROXY_PASSWORD="${PROXY_USER#*:*}"
# PROXY_USER="${PROXY_USER%:*}"
#fi
if [[ "${PROXY_SERVER}" == *:* ]]; then
PROXY_SERVER_PORT="${PROXY_SERVER#*:*}"
PROXY_SERVER="${PROXY_SERVER%:*}"
fi
TMP_FILE=/tmp/ssh-proxy-${USER}/${LOCAL_PORT}
if [ ! -d /tmp/ssh-proxy-"${USER}" ]; then
mkdir /tmp/ssh-proxy-"${USER}"
fi
if [ -f "${TMP_FILE}" ]; then if [ -f "${TMP_FILE}" ]; then
echo "Error: tmpFile exist" echo "Error: tmpFile exist"
exit 1 exit 1
fi fi
PROXY_ADDRESS="${PROXY_SERVER}"
if [ ! "${PROXY_USER}" == "" ]; then
PROXY_ADDRESS="${PROXY_USER}@${PROXY_SERVER}"
fi
echo "Start proxy ${LOCAL_PORT}" echo "Start proxy ${LOCAL_PORT}"
if ! ssh -fND 127.0.0.1:"${LOCAL_PORT}" "${PROXY_USER}"@"${PROXY_SERVER}" -p "${PROXY_SERVER_PORT}"; then if ! ssh -fND 127.0.0.1:"${LOCAL_PORT}" "${PROXY_ADDRESS}" -p "${PROXY_SERVER_PORT}"; then
echo "Error: Proxy start error" echo "Error: Proxy start error"
exit 1 exit 1
fi fi
PID=$(lsof -i -P | grep ":${LOCAL_PORT} (LISTEN)" | awk -F ' ' '{print $2}') PID=$(lsof -i -P | grep ":${LOCAL_PORT} (LISTEN)" | awk -F ' ' '{print $2}')
if [ "${PID}" == "" ]; then if [ "${PID}" == "" ]; then
echo "Error: No PID found" echo "Error: No PID found"
exit 1 exit 1
fi fi
{ {
if [ ! "${PROFILE_NAME}" == "" ]; then #if [ ! "${PROFILE_NAME}" == "" ]; then
echo "PROFILE_NAME=${PROFILE_NAME}" # echo "PROFILE_NAME=${PROFILE_NAME}"
fi #fi
echo "LOCAL_PORT=${LOCAL_PORT}" #echo "LOCAL_PORT=${LOCAL_PORT}"
#echo "PROXY_USER=${PROXY_USER}" #echo "PROXY_USER=${PROXY_USER}"
echo "PROXY_SERVER=${PROXY_SERVER}" #echo "PROXY_SERVER=${PROXY_SERVER}"
#echo "PROXY_SERVER_PORT=${PROXY_SERVER_PORT}" #echo "PROXY_SERVER_PORT=${PROXY_SERVER_PORT}"
echo "PROXY=${PROXY_ADDRESS}"
echo "PID=${PID}" echo "PID=${PID}"
} > "${TMP_FILE}" } > "${TMP_FILE}"
} }
function stopProxy() { function stopProxy() {
LOCAL_PORT=${1}
TMP_FILE=/tmp/ssh-proxy-${USER}/${LOCAL_PORT}
if [ ! -f "${TMP_FILE}" ]; then if [ ! -f "${TMP_FILE}" ]; then
echo "Error: tmpFile doesn't exist" echo "Error: tmpFile doesn't exist"
exit 1 exit 1
@@ -136,8 +153,25 @@ function stopProxy() {
rm "${TMP_FILE}" rm "${TMP_FILE}"
} }
function startAll() {
for FILE in ~/.config/ssh-proxy/*; do
PROFILE=$(basename "${FILE}")
startProxy "${PROFILE}"
done
}
function stopAll() {
for FILE in /tmp/ssh-proxy-"${USER}"/*; do
PORT=$(basename "${FILE}")
stopProxy "${PORT}"
done
}
case ${1} in case ${1} in
"start") startProxy;; "status") showProxyStatus;;
"stop") stopProxy;; "start") startProxy "${2}" "${3}";;
"stop") stopProxy "${2}";;
"startall") startAll;;
"stopall") stopAll;;
*) exit 1;; *) exit 1;;
esac esac

54
completion/bash/ssh-proxy Normal file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
_ssh-proxy() {
# shellcheck disable=SC2034
local cur prev words cword args
_init_completion || return
local -r cmdargs="status start stop startall stopall"
local -r cnfargs="--help"
local profiledir=~/.config/ssh-proxy
local tempdir="/tmp/ssh-proxy-${USER}"
if [[ ${COMP_WORDS[*]} == *"--help"* ]]; then
return
fi
args=${cmdargs}
for arg in ${cnfargs}; do
if [[ ${COMP_WORDS[*]} != *"${arg}"* ]]; then
args+=" ${arg}"
fi
done
for arg in ${cmdargs}; do
if [[ ${COMP_WORDS[*]} == *" ${arg} "* ]]; then
args=""
fi
done
case $prev in
--help)
return
;;
status | startall | stopall)
return
;;
start)
local -r PROFILELIST=$(\ls ${profiledir})
# shellcheck disable=SC2207
COMPREPLY=($(compgen -W "${PROFILELIST}" -- "${COMP_WORDS[COMP_CWORD]}"))
return
;;
stop)
local -r PROFILELIST=$(\ls ${tempdir})
# shellcheck disable=SC2207
COMPREPLY=($(compgen -W "${PROFILELIST}" -- "${COMP_WORDS[COMP_CWORD]}"))
return
;;
*)
# shellcheck disable=SC2207
COMPREPLY=($(compgen -W "${args}" -- "${COMP_WORDS[COMP_CWORD]}"))
return
;;
esac
} && complete -F _ssh-proxy ssh-proxy