1

As the title says I'm having a very strange problem with SSH connections at my house, it seems that after about 3-5 minutes of inactivity any SSH sessions I have open will just shutdown and leave the SSH connection in an appeared active state as I do not receive a timeout or reset message and I cannot provide any input or receive any output, it's as if it has become frozen in time and I must close the terminal window itself.

I know that the server's I am connecting too are not the problem as I regularly use them at the office with no issues, sometimes keeping a session open for hours on end.

I have attempted to set the SSH KeepAlive with no success, running top has been the only solution I can find so far to keep the connection open and it does not always guarantee.

I have been attempting to debug this issue for quite some time and have come up with absolutely nothing and beginning to wonder if this could possibly be my ISP ( Brighthouse ) or my modem/router ( RCA Thompson DWG855T ) causing the problem, I am leaning towards the later but I cannot remove and test the connection alone as the RCA is a router/modem combo .....

As anyone experienced this problem before and found a viable solution?

Here is the -vvv ssh with certain info #### out

OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data ###
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to ##### port 22.
debug1: Connection established.
debug1: identity file ### type -1
debug3: Not a RSA1 key file ###.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file #### type 1
debug1: identity file #### type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
debug1: match: OpenSSH_4.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.1
debug2: fd 3 setting O_NONBLOCK
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: 
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-cbc hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 116/256
debug2: bits set: 488/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug3: check_host_in_hostfile: filename ####
debug3: check_host_in_hostfile: match line 17
debug3: check_host_in_hostfile: filename ####
debug3: check_host_in_hostfile: match line 16
debug1: Host '####' is known and matches the RSA host key.
debug1: Found key in ####:17
debug2: bits set: 486/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: #### (0x0)
debug2: key: #### (0x407f00)
debug2: key: #### (0x0)
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-with-mic,password
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: ####.ssh/identity
debug3: no such identity: ####.ssh/identity
debug1: Offering public key: ####.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp 32:97:a1:c0:1a:26:24:e2:a2:c2:be:47:46:31:a9:94
debug3: sign_and_send_pubkey
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: tty_make_modes: ospeed 38400
debug3: tty_make_modes: ispeed 38400
debug2: channel 0: request shell confirm 1
debug2: fd 3 setting TCP_NODELAY
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Nick
  • 153
  • 1
  • 8

2 Answers2

3

I have had similar problems with while connecting over bad connections. The following configuration did the trick for me. In the server's sshd_config add the following

ClientAliveInterval 60

For details you can lookup manual page of sshd_config. Good luck : )

Can Kavaklıoğlu
  • 978
  • 1
  • 8
  • 11
2

Check the timeout settings on the router at the server side (the system you're connecting to). I usually run into the 5-minute delay as a result of the default settings on Sonicwall firewalls. In these cases, I'll make the following changes on the ssh server IF I don't have access to correct this on the firewall side.

In /etc/ssh/sshd_config, I add or make sure the following directives are set:

TCPKeepAlive yes
KeepAlive yes
ClientAliveInterval 60

Restart the ssh daemon, and the issue should go away.

You can also make the change on your client system. This entails adding ServerAliveInterval 60 to /etc/ssh/ssh_config and reconnecting or adding -o ServerAliveInterval=60 to your ssh connection string.

sysadmin1138
  • 133,124
  • 18
  • 176
  • 300
ewwhite
  • 197,159
  • 92
  • 443
  • 809
  • Thanks for the response but as stated I can connect to servers at the office for hours on end without disconnection this also is not a single server itself it is all ssh connections. – Nick Dec 12 '11 at 21:34
  • I understand. If the problem is an issue from home, then one of the following needs to be changed: the keepalives that I posted can reduce the impact of a short timeout on your organization's firewall if you can't have the firewall settings modified. – ewwhite Dec 12 '11 at 21:37
  • Added the configuration settings and issue persists – Nick Dec 12 '11 at 22:28
  • Did you restart the daemon on the server you were connecting to following the configuration change? Also, what are you connecting FROM? Windows? Linux? Using PuTTY? – ewwhite Dec 12 '11 at 22:35
  • Yes the server was restarted I am connecting from OSX. – Nick Dec 12 '11 at 22:48
  • If you want to test quickly, you can make the change on your client system. In Linux, this entails adding `ServerAliveInterval 60` to `/etc/ssh/ssh_config` and reconnecting. On the Mac, you will need to use sudo/root to add the same parameter to `/private/etc/ssh_config` or add `-o ServerAliveInterval 60` to your ssh string. – ewwhite Dec 12 '11 at 23:30
  • Finally seems adding ServerAliveInterval to the /private/etc/ssh_config fixed the problem, is their a reason why adding it to my private ssh config ~/.ssh/config did not provide the same results as this was previously attempted – Nick Dec 13 '11 at 23:01
  • Does SSH expect to read the ServerAliveInterval variable from the user prefs file? Also, I have a problem at work where the router supplied by the ISP insists on dropping SSH connections; it sounds like the inverse of your problem and your home router can't keep the session open (or your ISP has poor routing or forcibly drops the almost-inactive session!). I work around dropped sessions by starting one up then leaving `top` or `watch --interval=0.1 iostat -m` open when not in use; it's constantly pumping a low amount of data and this keeps the TCP session alive. – Chris Woods Feb 17 '13 at 04:27
  • `KeepAlive` is not mentioned in `man 5 sshd_config` – Vitaly Zdanevich Feb 23 '22 at 03:59