Linux / UNIX kill unresponsive hung SSH session

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:

ADVERTISEMENTS

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 ~. (tilde, period). Please note that escapes are only recognized immediately after newline. Hence, we need to press the Enter key.

Linux UNIX kill unresponsive hung SSH session with ESCAPE CHARACTERS

I killed an unresponsive ssh session without closing the terminal

SSH ESCAPE CHARACTERS List

ESCAPE CHARACTERDescription
~. Disconnect. In other words press tilde followed by period
~^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.

Say hello to Mosh (mobile shell)

Mosh is a free and opensource ssh client with additional features meant to improve usability for mobile users. Mosh maintains ssh session even when “roams.” In other words, when the client endpoint changes to different IP addresses, for example, by moving to a different Wi-Fi network or when changing from Wi-Fi to 3G/4G LTE. You’ll stay logged in. Most network programs lose their connections after roaming, including SSH and Web apps like Gmail. Mosh is different. It is a perfect ssh client, and no need to kill unresponsive hung SSH session.

Installation

Use the apt-get command or apt command as follows:
$ sudo apt install mosh
Alpine Linux user try the dnf command:
$ sudo dnf install mosh
OpenSUSE Linux user try the zypper command:
$ sudo zypper in mosh
MacOS user try the NA command or port command:
*BSD user run the pkg command/pkg_add command to install the same:
# pkg install net/mosh # FreeBSD
# pkg_add mosh # OpenBSD

$ brew install mosh
Android user can download either Termux or JuiceSSH from the Play Store. Apple iOS mobile user try Blink Shell from the App Store.
Are you stuck on Microsoft Windows? No worries. Try the Chrome version of Mosh, which is the easiest way to try out mosh on Windows.

Conclusion

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 the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallCentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNCentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
6 comments… add one
  • Joe Feb 9, 2012 @ 11:45

    Thanks, very useful tip!

  • aenea Apr 18, 2012 @ 10:57

    thank you very much!

  • Almabani Dec 26, 2012 @ 14:34

    Thank you so very much….

  • pvibes Mar 7, 2013 @ 20:49

    I found this guys

    kill -1 `ps ax --forest | grep -i testdrive | grep -i priv | cut -d " " -f 1`

    • pvibes Mar 7, 2013 @ 20:50

      Just replace testdrive with the desired username

  • Victor Sep 18, 2020 @ 20:49

    I always thought, what can I do when my SSH session is stuck? I ended up closing my terminal. But, this is way better solution. Thanks da.

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.