How to Keep Remote SSH Sessions Running after Disconnection


Keep SSH Sessions Running

SSH (Secure Shell) is the end to end encrypted networking system that allows users to get access remotely from client to server or system. Because of its asymmetric cryptography security system, it’s pretty much safe and secure to access the server even from an unsafe client network. But sometimes due to inactivity or bad network signal, SSH remote access can get disconnected. Whatever the reason is, as a Linux administrator, it’s a vital job to keep SSH sessions and processes running after disconnection.

Reasons Why SSH Sessions Get Disconnected

In a nutshell, SSH tunnel proxy error, network timeout, using the wrong network port, or even not logged into your system as root user can also get you disconnected from the SSH remote administration. In this post, we are going to discuss the most frequently asked question about SSH; how to keep SSH sessions and processes running after disconnection is occurred.

1. Keep Running SSH Sessions Using the screen Command

The screen command is the most used and useful command for SSH administration. The screen command can resolve hostname problems for both IPv4 and IPv6 addresses. With root functionalities, the screen command can log out or dismiss a session from the client end to the server end. If you’re a very newbie at Linux SSH, here are some CLI that can help you to install and find manuals of the screen command.

For Ubuntu:

$ sudo apt install screen

For OpenSUSE:

$ sudo zypper install screen

For Arch Linux:

$ sudo pacman -S screen

For Red Hat Enterprise Linux:

$ sudo yum install screen

After you’re done installing, start monitoring your system start screen.

$ screen
$ screen --help

Once you have the access, SSH into the server, you want to get access remotely. If you’re planning a long night work from your station, but you don’t want to get your SSH client down, you can use the screen command. This can detach your screen session, but no worries, the tasks you initiated will be completed.

To detach your screen press Ctrl-A and then Ctrl-D from your keyboard. You can log in to monitor the work progress anytime from your terminal. To re-connect or connect with the existing one with the session, use the following CLI.

$ screen -r
screen -D -r

2. Keep Running SSH Sessions Using the tmux Tool

The tmux or terminal multiplexer is a very popular and useful tool for programmers and system administrators that allows users to switch between program to program in the same terminal. To keep SSH sessions running in the background, tmux can be a very quick solution. It can detach and reattach applications where the processes are kept running in the background. Here is the installation instruction of tmux for Linux distros.

For Arch Linux:

$ sudo pacman -S tmux

For Red Hat Enterprise Linux:

$ sudo yum install tmux

For Ubuntu:

$ sudo apt-get install tmux

For OpenSUSE:

$ sudo zypper install tmux

After installing tmux, start the tmux session using terminal commands. It won’t take much time to get installed. Once you’ve done installing you can now get started with tmux. To start tmux, just type tmux in the terminal.

$ tmux

If you need to run more than one terminal multiplexer to keep all SSH sessions running in the background, in that case, you may find difficulties to switch between tmux to tmux. Here are the command lines to switch one form another.

$ tmux detach
$ tmux attach
$ tmux attach -t 2

To check all the tmux screen use the tmux list command.

$ tmux ls

3. Keep Running SSH Sessions Using the byobu Tool

The byobu tool is mostly used for remote SSH administration and on-screen monitoring on Linux. It is an open source-sourced software and can be used alongside the tmux or the screen tool. You can see the current status, notifications, and messages with the byobu tool. Though the byobu comes installed by default with Ubuntu. But if it doesn’t, you can install it inside your Linux machine. To check whether byobu is installed or not in your system by checking the other versions of byobu.

$ byobu --version

Then enable byobu, it will help to keep your SSH sessions running in the background after even disconnection.

$ byobu-enable

Here the installation processes are explained with CLI.

For Ubuntu:

$ sudo apt install byobu

For OpenSUSE:

$ sudo zypper addrepo
$ sudo zypper refresh
$ sudo zypper install byobu

For Arch Linux:

$ yaourt -S byobu
$ packer -S byobu

For Red Hat Enterprise Linux:

$ sudo yum install byobu

For Fedora:

$ sudo dnf install byobu

To get started with byobu, just type byobu in the terminal and hit Enter.

$ byobu

Now, if you’re using the tmux or the screen, you can choose and select between any of them for backend collaborated.

$ byobu-select-backend

Now, you can manage and keep your SSH sessions running in the background after disconnection, use the system keyboard function keys. To get started with SSH alongside byobu, press CTRL+SHIFT+F2 from your keyboard to enable the SSH environment. To move your SSH sessions forward and backward you can use ALT+UP and ALT+DOWN.

To disconnect your SSH sessions press F6 from the keyboard. Now, if you’re looking for detaching but not disconnect the session, here you go. To detach SSH sessions and still get connected, press SHIFT+F6. Here is one more extra keyboard command for you. To keep only current the screen session active and close all other windows press ALT+F6.

4. Keep Running SSH Sessions Using the nohup Command

The nohup or ‘no hangup’ command is a very useful alternative tool for the screen or the tmux. It also allows users to keep the SSH sessions running even after they got disconnected. The nohup command tells the system to run all processes in the background by avoiding the signal hang up (SIGHUP).

To check the nohup manuals and options form your Linux terminal, type the following command in the terminal and hit Enter.

$ nohup options

To check the currently active job lists, use the -l command from your terminal.

$ jobs -l

Now, for SSH connection, to avoid connection lost and keep your sessions running after disconnection, use the nohup command lines following by your job. You can also get the output list of your jobs in a text file by using the cat command alongside the nohup command.

$ nohup ./
$ cat nohup.out

To run a process in the background, you can use the & symbol just after the nohup command. Like, if I want to test ping for in the background, the command line will be just like the following line below. And when you think your job is done, to see the outcome, use the pgrep command.

$ nohup ping &
$ pgrep -a ping

5. Keep Running SSH Sessions Using the disown Command

If you don’t have the system root privileges, maybe this one is going to solve your problem. The disown command can make any task unlisted from your running system log. Thus, it can hide an undergoing process to avoid all the auto log out errors or the signal hang up (SIGHUP). You can actually use the diswon process management command to keep your SSH sessions running by hiding your task.

To remove or hide your task from the task manager, use the diswon command in the terminal.

$ disown <task>

To check the current status of the task, use the current shell command.

$ current shell

You can also set a list of tasks at a single line terminal command.

$ disown jobs1
$ disown jobs1 jobs2 ... jobsn

And to check the task list, use the -l command.

$ jobs -l

To remove all current jobs from the window, type the -a syntax following by the disown command.

$ disown -a

To remove only one or the running job from the window, use the -r syntax following by the diswon command.

$ disown -r

Now for SSH, to run a job in the background after the session is connected, use the -h syntax. This process can keep your SSH sessions running even after disconnection.

$ disown -h jobID
$ disown -h %2

Fixing the timeout Error of SSH in RHEL

When you’re connected to the SSH on Red Hat Enterprise Linux (RHEL), you may get a frequent timeout problem and get your connection lost. This problem occurs due to the invalid response time form either the client end or the host end. In your Red Hat root directory, you have to find and edit the sshd_config.txt file to solve these timeout problem. Once you’re done, you can get your SSH connection back even after getting disconnected.

There inside the sshd_config.txt, file you will find two options named as ClientAliveInterval and ClientAliveCountMax, you need to edit these log files to maximize the server to client response time. The timeout interval is calculated by multiplying the values of ClientAliveInterval and ClientAliveCountMax.

All you need is to edit the time duration of this two values according to your system and network responding duration. Let you want to maximize the time 10 minutes for the client interval end and 5 times for the client count, then your text registry inside the sshd_config.txt file will be like below. And then, restart the SSH.

ClientAliveInterval 10m
ClientAliveCountMax 5

For a system administrator, keep SSH sessions and processes running is a crucial job to satisfy the client and to fulfill the task. Getting disconnected and frequent sessions lost is very much annoying and bothersome. So in this post, we have tried to discuss and illustrate the reasons why SSH sessions get disconnected and also described all the possible methods on how to keep SSH sessions running after disconnection.

If you have ever gone through the hassle of SSH session disconnection and know how annoying it could be, please share your experience with us. And also do comment if you have anything to add or ask anything related to this post in the comment section. Don’t forget to share this post with your friends on social media.