Every time I have either forgotten to forward a port over SSH, or needed to SSH into another machine first so I could find out what IP and port I needed to forward to, I have closed the SSH session and started a new one with the correct -L
or -R
option. After all these years I just found out that OpenSSH has a built in command line. I always knew about pressing ~.
after a newline to close an SSH session, but didn't know I could use ~?
to get a list of supported escape commands. One of those escape key sequences is ~C
which brings up the openssh command line providing the following commands:
ssh> ?
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KL[bind_address:]port Cancel local forward
-KR[bind_address:]port Cancel remote forward
-KD[bind_address:]port Cancel dynamic forward
So for example if I want to add a forward for my local port 1032 to 192.168.178.32:80 on the remote network I would type the following after a newline:
~C
-L 1032:192.168.178.32:80
and it would give a helpful little message saying Forwarding port.
It looks like this command line has been available in OpenSSH since at least version 3.2.2 from 2002, that's over 20 years ago! It also provides the ability to remove a forward using the KL
, KR
, and KD
commands which can be useful if you need to point it at a new destination.