#!/usr/bin/env zsh # Forward a local port to a server via SSH tunnel. setopt LOCAL_OPTIONS ERR_RETURN NO_UNSET PIPE_FAIL zmodload zsh/zutil local -a o_help=() local -a o_lport=() local -a o_rport=() zparseopts -D -K -- h=o_help -help=o_help -local-port:=o_lport -remote-port:=o_rport if [[ ${#o_help} -ne 0 || ! -v 1 || ${#o_lport} -ne 2 || ${#o_rport} -ne 2 ]]; then local ret=$(( ${#o_help} ^ 1 )) print -u $(( 1 + ${ret} )) "usage: ${0} [-h|--help]" \ "--local-port --remote-port " return ${ret} fi local host=${1} local lport=${o_lport[2]} local rport=${o_rport[2]} print -P "%F{12}Forwarding local port%f %F{13}${lport}%f %F{12}over SSH tunnel" \ "to%f" "%F{13}${host}%f %F{12}port%f %F{13}${rport}%f %F{12}…%f" ssh -R ${rport}:"[::1]":${lport} -N -T ${host}