[esc]ism

A tech weblog

SSH Escape Sequence: ~.

A while back I was using ipmitool and Serial-over-LAN for some serial console access to remote servers. This involved tunnelling through multiple SSH sessions, then connecting over serial via ipmitool.

While you can’t Ctrl+D out of an ipmitool session – which is how I usually terminate an SSH session – ipmitool does support SSH escape sequences:

Supported escape sequences:
 ~.   - terminate connection (and any multiplexed sessions)
 ~B   - send a BREAK to the remote system
 ~C   - open a command line
 ~R   - request rekey
 ~V/v - decrease/increase verbosity (LogLevel)
 ~^Z  - suspend ssh
 ~#   - list forwarded connections
 ~&   - background ssh (when waiting for connections to terminate)
 ~?   - this message
 ~~   - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

However, issuing a ~. dumped me back out to my local machine! Not ideal.

I now know this is the standard behaviour of this escape sequence for any SSH session, but I only wanted to terminate the current ipmitool session, not my entire SSH tunnel.

The solution? Add extra ~’s!

Specifically, add as many ~’s as SSH sessions you’ve started in order to go back one session. If you’ve had to SSH three times, ~~~. will dump you back to your second session – one session back.

In summary:

~.    Back to localhost  
~~.   Back to first SSH session  
~~~.  Back to second SSH session  
~~~~. Back to third SSH session

etc…