When I was working with ssh, sometime a ssh connection was broken with a message:
Read from remote host example.com: Connection reset by peer
Connection to example.com closed.
This is because that a connection is cut by a router if there is no action for a while.
To prevent such a situation, there are several ways like below.
How to keep a connection
In principle, it is cut because there is no action. Therefore, if either a server or a client sends something, the connection can be kept.
Of course it could be solved if you can change the router’s settings not to cut even in such a situation. But sometime router’s can’t be touched by you.
In such cases, you can use ssh’s function.
Solve at a server side
If you are an administrator of a server, following settings in /etc/ssh/sshd_config works:
ClientAliveInterval 60
ClientAliveCountMax 3
Add these lines in the file (or edit corresponding lines)
and restart sshd
:
$ sudo /etc/init.d/sshd restart
ClientAliveInterval
sets an interval to send a message to the connected client
to confirm the connection (in second).
The default is 0, and it doesn’t send a message.
ClientAliveCountMax
is a number of repeats to try to send a message when
it fails with a timeout.
The default value is 3.
Above settings try to send a message 3 times with an interval of 60 seconds (i.e. try for 180sec).
ClientAliveInterval
must be shorter than what the setting of the router’s cut timing.
Solve at a client side
If you can edit the server, you can use a client side setting.
ssh
has a function to send a message from a client side, too.
To use it, add following lines in your ~/.ssh/config:
ServerAliveInterval 60
ServerAliveCountMax 3
Here, names have ServerAlive, as they are for confirming if a server is alive or not. (and a server side settings are named as ClientAlive, to check a client.)
This is similar to the server side function.
ServerAliveInterval
sets an interval to send a message (the default is 0, not to send),
and ServerAliveCountMax
sets a maximum number of trials (the default is 3).
With these settings, you can prevent such a disconnection for any servers.
Work at Putty
If you are working with Putty in Windows, you can use Putty’s function.
It has a function to send a harmless packet to keep a connection, called Hertbeat function.
In Connection of the setting window, you can find Sending of null packets to keep session active. There is a setting Seconds between keepalive (0 to turn off).
0
doesn’t send a packet.
If you set it as 60
, it works similar to above ServerAliveInterval
,
sending a packet periodically.
TereTerm also has a similar function.
Ref: