Sometimes my ssh session stops working because of the internet connection problem. I tried pressing CTRL+Z and CTRL+C to terminate my ssh session but failed to work. How do I properly kill a hung SSH session without killing my local terminal or using the kill command? How can I kill unresponsive hung SSH session on macOS?

If the Internet or Intranet connection interrupted the ssh get hung. It is normal and can be mildly infuriating. However, ssh connection comes with escape character support. From the ssh command man page:

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 supported escapes (assuming the default ~) are:
~. Disconnect.

macOS, Linux / UNIX kill unresponsive hung SSH session

So all you’ve to do is press [Enter] key followed by ~.. Please note that escapes are only recognized immediately after newline.

Linux UNIX kill unresponsive hung SSH session with ESCAPE CHARACTERS
I killed an unresponsive ssh session without closing the terminal


~. 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 supports 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.


You just learned how to close a hanging ssh session on a Linux, macOS, *BSD and Unix-like systems using the default escape charter. I suggest that you read the man page of ssh online here or by typing the following man command:
$ man ssh

Get up to 50% off on Linux Foundation certified SysAdmin, Kubernetes/Containers and Open Stack certification bundle. Offer expires on August 3, 2018

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.