nix-config/pkgs/xpo/xpo.sh
Greg Burd f3fd89af54
A fork of Misterio77 and his standard template.
Many thangs to the hard work and generous availability of:
git@github.com:Misterio77/nix-config.git
2023-09-15 10:53:38 -04:00

53 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# Exposes a port through SSH
# xpo [local port] [remote host] [remote port]
#
# Arguments:
# - local port: defaults to 8080
# - remote host: defaults to $XPO_SERVER
# - remote port: defaults to randomly chosen
#
# Environment variables:
# - $XPO_SERVER: server to ssh into
# - $XPO_SSH_USER: override user used to ssh, defaults to $USER
# - $XPO_SSH_OPTS: additional ssh options, defaults to "-A"
socket="${XDG_RUNTIME_DIR:-/run/user/${UID:-1000}}/xpo-$BASHPID.sock"
server="${2:-$XPO_SERVER}"
user="${XPO_SSH_USER:-$USER}"
l_port="${1:-8080}"
ssh_opts="${XPO_SSH_OPTS:-"-A"}"
# Open master ssh connection
ssh -fTN "$ssh_opts" -MS "$socket" "$user@$server"
echo "Forwarding :$l_port" >&2
# If port was supplied
if [ -n "${3:-}" ]; then
r_port="$3"
ssh -S "$socket" -O forward -R "*:$r_port:localhost:$l_port" xpo
else
# Forward port and record it
r_port="$(ssh -S "$socket" -O forward -R "*:0:localhost:$l_port" xpo)"
fi
echo "$server:$r_port"
# Open it through iptables
echo -n "Opening $r_port on firewall... " >&2
ssh "$ssh_opts" -t -S "$socket" xpo -- sudo iptables -I INPUT -p tcp --dport "$r_port" -j ACCEPT
echo "done" >&2
clean() {
# Close it
echo "Closing $r_port on firewall... " >&2
ssh "$ssh_opts" -t -S "$socket" xpo -- sudo iptables -D INPUT -p tcp --dport "$r_port" -j ACCEPT
echo "done" >&2
# Close the ssh connection
ssh -S "$socket" -O exit xpo
}
trap clean EXIT
sleep infinity