Way to avoid ssh connection timeout & freezing of GNOME Terminal

sshd (the server) closes the connection if it doesn't hear anything from the client for a while. You can tell your client to send a sign-of-life signal to the server once in a while.

The configuration for this is in the file ~/.ssh/config. To send the signal every four minutes to remotehost, put the following in your ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

This is what I have in my ~/.ssh/config.

To enable it for all hosts use:

Host *
  ServerAliveInterval 240

Also make sure to run chmod 600 ~/.ssh/config, because the config file must not be world-readable.


Press Enter, ~, . one after the other to disconnect from a frozen session.

The section "ESCAPE CHARACTERS" in the ssh man page explains the underlying details.


Even tho this is not a direct answer to your question, it is highly related to the problem you have. Instead of trying to keep the connection alive (all connections eventually die) you can use terminal multiplexors, like screen and tmux that keep the session alive in the background even if your terminal gets disconnected.

Essentially when you login in to the SSH server you immediately run screen which will create and attach a new session:

$ screen

Then you go ahead and do your work with the shell as you would normally do. Now if the connection gets dropped, when you can get back online and reconnect to the server over SSH, you get a list the current sessions with:

$ screen -ls

To reattach to a session:

$ screen -r <session>

where <session> is the PID or a session name. You will be reconnected to your session and you can continue from where you left off!

You can even detach the session and reconnect from home to pick up from the exact point where you left off. To detach the session you use C-a followed by C-d (thats Control + A and then Control + D).

There is simple online tutorial as well.

Using screen and tmux on remote servers is considered a best practice and is highly recommended. Some people go as far as to have screen as their default login shell, so when they connect they immediately start a new screen session.


Try appending -o ServerAliveInterval=30 to your connection string (30 means 30 seconds and can of course be adjusted)


You can also set an idle timeout interval from SSH server side:

File: /etc/ssh/ssh_config

Content:

ClientAliveInterval XX
ClientAliveCountMax YY

This works in the exact same way as the client setting, but null packets are sent from from the server, rather than the client.

Extracted from:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html