Skip to content

Instantly share code, notes, and snippets.

@k8scat
Created September 1, 2023 03:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save k8scat/8b01d690a171ca517b47aef45221a179 to your computer and use it in GitHub Desktop.
Save k8scat/8b01d690a171ca517b47aef45221a179 to your computer and use it in GitHub Desktop.
ssh port_forwarding functions
# read in zsh is different from bash
# https://superuser.com/questions/555874/zsh-read-command-fails-within-bash-function-read1-p-no-coprocess
# in bash, read -p "prompt" var
# but in zsh, read "var?prompt"
function port_forwarding_local() {
echo "port forwarding to remote server"
read "local_host?local_host (default is empty): "
read "local_port?local_port: "
if [[ -z "${local_port}" ]]; then
echo "local_port cannot be empty"
return 1
fi
if [[ -n "${local_host}" ]]; then
local_addr="${local_host}:${local_port}"
else
local_addr="${local_port}"
fi
read "remote_host?remote_host: "
if [[ -z "${remote_host}" ]]; then
echo "remote_host cannot be empty"
return 1
fi
read "remote_port?remote_port: "
if [[ -z "${remote_port}" ]]; then
echo "remote_port cannot be empty"
return 1
fi
remote_addr="${remote_host}:${remote_port}"
read "remote_server?remote_server: "
if [[ -z "${remote_server}" ]]; then
echo "remote_server cannot be empty"
return 1
fi
local cmd="ssh -L ${local_addr}:${remote_addr} -N -C ${remote_server}"
echo ${cmd}
bash -c "${cmd}"
}
function port_forwarding_remote() {
echo "port forwarding to localhost"
read "remote_host?remote_host (default is empty): "
read "remote_port?remote_port: "
if [[ -z "${remote_port}" ]]; then
echo "remote_port cannot be empty"
return 1
fi
if [[ -n "${remote_host}" ]]; then
remote_addr="${remote_host}:${remote_port}"
else
remote_addr="${remote_port}"
fi
read "local_host?local_host (default is 127.0.0.1): "
if [[ -z "${local_host}" ]]; then
local_host="127.0.0.1"
fi
read "local_port?local_port: "
if [[ -z "${local_port}" ]]; then
echo "local_port cannot be empty"
return 1
fi
local_addr="${local_host}:${local_port}"
read "remote_server?remote_server: "
if [[ -z "${remote_server}" ]]; then
echo "remote_server cannot be empty"
return 1
fi
local cmd="ssh -R ${remote_addr}:${local_addr} -N -C ${remote_server}"
echo ${cmd}
bash -c "${cmd}"
}
function port_forwarding_dynamic() {
echo "port forwarding as dynamic socks5 proxy"
read "local_port?local_port: "
if [[ -z "${local_port}" ]]; then
echo "local_port cannot be empty"
return 1
fi
read "remote_server?remote_server: "
if [[ -z "${remote_server}" ]]; then
echo "remote_server cannot be empty"
return 1
fi
local cmd="ssh -D ${local_port} -N -C ${remote_server}"
echo ${cmd}
bash -c "${cmd}"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment