Exit An Unresponsive SSH Session

Ever wondered how to exit an unresponsive SSH session after an internet connection drop?

If you spend a lot of time on the CLI remoting into random servers, you might have encountered an unresponsive SSH session due to a diconnected internet connection, more than a few times.

Of course you can wait until the session times out with a Broken pipe error. And surely you can tinker with the timeout value in the configs but who wants to wait so long, especially when you can exit it easily?

All you have to do is hit the Enter key, then type ~. and ssh should immediately close and return you to your command prompt.

The man page of SSH also documents other escape sequences as follows:

$ man ssh

When a pseudo-terminal has been requested, ssh supports a number of
functions through the use of an escape character.

A single tilde character can be sent as ~~ or by following the tilde by
a character other than those described below.  The escape character
must always follow a newline to be interpreted as special.  The escape
character can be changed in configuration files using the EscapeChar
configuration directive or on the command line by the -e option.

The supported escapes (assuming the default ‘~’) are:

~.      Disconnect.

~^Z     Background ssh.

~#      List forwarded connections.

~&      Background ssh at logout when waiting for forwarded connection
        / X11 sessions to terminate.

~?      Display a list of escape characters.

~B      Send a BREAK to the remote system (only useful if the peer sup‐
        ports it).

~C      Open command line.  Currently this allows the addition of port
        forwardings using the -L, -R and -D options (see above).  It
        also allows the cancellation of existing port-forwardings with
        -KL[bind_address:]port for local, -KR[bind_address:]port for
        remote and -KD[bind_address:]port for dynamic port-forwardings.
        !command allows the user to execute a local command if the
        PermitLocalCommand option is enabled in ssh_config(5).  Basic
        help is available, using the -h option.

~R      Request rekeying of the connection (only useful if the peer
        supports it).

~V      Decrease the verbosity (LogLevel) when errors are being written
        to stderr.

~v      Increase the verbosity (LogLevel) when errors are being written
        to stderr.