Add functions to start/stop and ssh socks proxy

This commit is contained in:
Jonny Barnes 2023-04-23 13:31:23 +01:00
parent 9106aeac69
commit 4eba89e95d
Signed by: jonny
SSH key fingerprint: SHA256:CTuSlns5U7qlD9jqHvtnVmfYV3Zwl2Z7WnJ4/dqOaL8

View file

@ -66,6 +66,69 @@ function pr-checkout() {
fi fi
} }
# tail, but better
function watch-file() { function watch-file() {
tail -f $1 | bat --paging=never -l log tail -f $1 | bat --paging=never -l log
} }
# Get a temporary directory in a cross-platform manner
# See https://unix.stackexchange.com/a/685873
function get-temporary-directory() {
local temporary_directory=${XDG_RUNTIME_DIR:-${TMPDIR:-${TMP:-${TEMP:-/tmp}}}}
echo $temporary_directory
}
# Start an SSH SOCKS tunnel
function start-proxy() {
if [ -z "$SSH_PROXY_HOST" ]; then
echo "SSH_PROXY_HOST is not set or empty"
return
fi
local socket_dir=$(get-temporary-directory)
# Check if the last character of socket_dir is a directory separator character
if [[ $socket_dir[-1] == / ]]; then
# If yes, remove the directory separator character
socket_dir="${socket_dir%?}"
fi
echo "Opening proxy connection"
# Below we use -S and -M to help make closing the connection more reliable
# See this Stack Overflow answer for more info
# https://unix.stackexchange.com/a/525388
# -D 1337 opens up the SOXKS tunnel on localhost:1337
# -f Tells `ssh` to fork the ssh process in to the background
# -C Enables compression of data on the connections
# -q Uses quiet mode
# -N Do not execute a remote command on this connection
# -S Set the ControlPath for this connection
# -M Place the client into `master` mode
ssh -D 1337 -f -C -q -N -S $socket_dir/ssh-proxy-control -M $SSH_PROXY_HOST
}
# Stop an open proxy connection
function stop-proxy() {
if [ -z "$SSH_PROXY_HOST" ]; then
echo "SSH_PROXY_HOST is not set or empty"
return
fi
local socket_dir=$(get-temporary-directory)
# Check if the last character of socket_dir is a directory separator character
if [[ $socket_dir[-1] == / ]]; then
# If yes, remove the directory separator character
socket_dir="${socket_dir%?}"
fi
echo "Closing proxy connection"
# See the comments in `start-proxy()` for more info
ssh -S $socket_dir/ssh-proxy-control -O exit $SSH_PROXY_HOST
}