I frequently use SSH port forwarding to access services on computers I'm connected to (e.g. VNC, web servers, Zeya). For example,
ssh -L 8001:localhost:8080 foobar
connects port 8001 on my local machine to whatever service is running on foobar port 8080.
Sometimes I'll discover mid-session that I wish to connect to a new service I've just started up remotely, or that I forgot to add the -L flag for some service I wanted. I could always just disconnect, add the appropriate port forwardings, and reconnect.
However, I just learned that SSH also supports some escape sequences, one of which lets you break out to a command line, where you can change port forwardings mid-session without disconnecting.
With the default settings, type ~C at the beginning of your session or after a newline. You'll see a command prompt:
At this prompt, you can add additional forwardings using the same syntax that ssh accepts:
- Local forwarding to remote service: -L local_port:hostname:hostport
- Remote forwarding to local service: -R remote_port:hostname:hostport
- Dynamic forwarding, e.g. for SOCKS: -D port