Way to avoid ssh connection timeout & freezing of GNOME Terminal
Solution 1
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.
Solution 2
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.
Solution 3
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.
Solution 4
Try appending -o ServerAliveInterval=30
to your connection string (30
means 30 seconds and can of course be adjusted)
Solution 5
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
Related videos on Youtube
Cameron Mark Lewis
I make a ninja game at ninjawars.net, am hirable at bitlucid.com, do art & origami when I can at dnaexmosn.deviantart.com, and code open source stuff on github at github.com/tchalvak Code in: node react php javascript python (some) html/css Learning currently: Css-grid npm packaging aka Tchalvak
Updated on September 17, 2022Comments
-
Cameron Mark Lewis over 1 year
When I connect via ssh to certain servers, it timeouts and "freezes" the terminal (doesn't accept input, doesn't disconnect, can't Ctrl-C to kill the ssh process or anything).
This is in Ubuntu's
gnome-terminal
though it seems to be pausing the terminal input/output, and doesn't affect the operation of the GNOME Terminal software itself. So less a bug withgnome-terminal
than an annoying inconsistency with ssh.So, is there a way to prevent/regain the terminal from ssh connections that have timed out?
-
Admin over 6 yearsPossible duplicate of How to reliably keep an SSH tunnel open?
-
-
karthik over 12 yearsThanks sblair for helping me with the wording, it's much appreciated. I changed "should not" back to "must not" because ssh checks the permissions of the file and if it is world or group readable it fails.
-
CoatedMoose over 11 yearsThis answer appears to me to more accurately answer the question, and in any case, was the answer I was looking for.
-
Aditya M P almost 11 yearsNote that you need to uncomment the line
EscapeChar ~
in/etc/ssh/ssh_config
(or~/.ssh/ssh_config
if you prefer). -
Peter Eisentraut almost 11 years@adityamenon No,
EscapeChar ~
is already the built-in default. -
Aditya M P almost 11 yearsHmm, it did not work for me in Ubuntu 12.04 till I found that line and uncommented it...
-
Cerin almost 10 yearsThis is not what the OP asked. He's not getting kicked off due to inactivity. He's attempting to connect and his terminal is freezing.
-
User over 9 yearsWhere is this
~/.ssh/config
? -
so12311 over 9 yearsthis is useless if your connection is actually being lost...
-
Mark about 9 years@CoatedMoose The question title asks for ways to avoid ssh connection timeout; this is a way to terminate the connection after it has frozen. It's a very useful trick, but not a more accurate answer to the question.
-
CoatedMoose about 9 years@Mark the question asks "is there a way to prevent regain the terminal from ssh connections that have timed out?" Emphasis mine.
-
sarath over 8 yearsanother alternative is to use mosh: mosh.mit.edu
-
C-- about 8 yearsEventhough it was incorrect in the context of the question, this is exactly what I wanted.
-
Randall almost 8 yearsThis is especially useful if you are using a hotspot or wifi that occasionally drops out.
-
James McCormac about 7 yearsThis is one of the most useful commands for anyone accessing remote machines from a laptop/wifi!
-
gone almost 7 yearsIs there a way to make this sequence into a short-cut, so I just press something like
ctrl-alt-c
or something? -
timuçin over 3 yearsYou are my best friend from now on
-
Mikko Rantalainen over 3 yearsTo configure server settings, you have to modify the
/etc/ssh/sshd_config
. Thessh_config
is for client settings, thesshd_config
(SSH Daemon) is the server part.