To diagnose, first you have to use a verbose mode of putty.exe.
Open cmd and use :
putty.exe -v -ssh user@]host
The -v will show you many more information.
To avoid close connections, verify your settings :
On PuTTY (Win) :
go to session properties > connection, and under Sending of null packets to keep session active, set Seconds between keepalives (0 to turn off) to e.g. 300 (5 minutes).
On Linux (ssh) :
To enable the keep alive system-wide :
- for all users: edit /etc/ssh/ssh_config.
- just for you: edit ~/.ssh/config instead.
Insert the following:
You can also make your OpenSSH server keep alive all connections with clients by adding the following to /etc/ssh/sshd_config:
These settings will make the SSH client or server send a null packet to the other side every 300 seconds (5 minutes), and give up if it doesn’t receive any response after 2 tries, at which point the connection is likely to have been discarded anyway.
From the ssh_config man page:
ServerAliveCountMax Sets the number of server alive messages (see
below) which may be sent without ssh(1) receiving any messages back
from the server. If this threshold is reached while server alive
messages are being sent, ssh will disconnect from the server,
terminating the session. It is important to note that the use of
server alive messages is very different from TCPKeepAlive (below). The
server alive messages are sent through the encrypted channel and
therefore will not be spoofable. The TCP keepalive option enabled by
TCPKeepAlive is spoofable. The server alive mechanism is valuable when
the client or server depend on knowing when a connection has become
The default value is 3. If, for example, ServerAliveInterval (see
below) is set to 15 and ServerAliveCountMax is left at the default, if
the server becomes unresponsive, ssh will disconnect after
approximately 45 seconds. This option applies to protocol version 2
only; in protocol version 1 there is no mechanism to request a
response from the server to the server alive messages, so
disconnection is the responsibility of the TCP stack.
ServerAliveInterval Sets a timeout interval in seconds after which if
no data has been received from the server, ssh(1) will send a message
through the encrypted channel to request a response from the server.
The default is 0, indicating that these messages will not be sent to
the server, or 300 if the BatchMode option is set. This option applies
to protocol version 2 only. ProtocolKeepAlives and SetupTimeOut are
Debian-specific compatibility aliases for this option.