Multi-hop X-forwarding over SSH
Sometimes you’d like to do X-forwarding over multiple hops. For instance:
Home ↔ Office gateway ↔ Office machine.
One way to automate this is with this Bash function:
sshx () {
[ -z "$2" ] && return
sudo ssh -Nn $1 -L 2200:$2:22 &
sleep 1s
PID=$!
ssh localhost -XYC -p2200
sudo kill $PID
}
Choose a random localhost port number; 2200 is merely an example here.
Then invoke with:
$ sshx passthrough_server destination_server
Since the snippet relies on Bash forking, it assumes you have set up SSH for public key based authentication with the passthrough server, and it will not ask for a password. Because SSH requires root privileges on your local machine to set up the port forwarding, your ~/.ssh/authorized_keys on the passthrough server must contains the public key of root from your local machine.