How to debug sporadic outbound connection timeouts?
I'm having trouble connecting to my remote host via SSH. I have narrowed the issue down to my local host only as other clients make nominal (fast and stable) connections every time.
Attempting to connect to remotehost.example.net
from localhost
via SSH will time out all but about 1 out of 10 attempts (it hangs here and then times out):
515 chris@localhost ~ $ ssh -vvv remotehost-root
OpenSSH_6.4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/chris/.ssh/config
debug1: /home/chris/.ssh/config line 43: Applying options for remotehost-root
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotehost.example.net [123.123.123.123] port 12345.
^C
localhost
is an up-to-date Arch system:
517 chris@localhost ~ $ uname -a
Linux localhost 3.12.1-1-ARCH #1 SMP PREEMPT Thu Nov 21 08:18:42 CET 2013 x86_64 GNU/Linux
And I'm using an SSH config file to alias remotehost
as follows:
521 chris@localhost .ssh $ cat ~/.ssh/config
...
host remotehost-root
HostName remotehost.example.net
User root
Port 12345
IdentityFile ~/.ssh/remotehost-root.id_rsa
...
This is a recent problem, but unfortunately I don't recall making changes to anything relevant. I'm not sure what to check.
Maybe it's worth noting that this affects all SSH connections (such as git over ssh and SFTP
) and not just the command line SSH tool.
I don't have any trouble accessing remotehost.example.net
over any other protocol (e.g. HTTP
, HTTPS
, BitTorrent, etc).
The only active/uncommented line in /etc/ssh/ssh_config
is:
ServerAliveInterval 120
Where else can I look? What other debug tools can I use (all I can think to do is run ssh -vvv
)?
I tried running tcpdump
on remotehost while attempting a connection, but couldn't figure out how to filter the packets from the shell running tcpdump
thus infinite-loop spamming myself out of any useful diagnostics.
UPDATE 1: Worth noting that I've been able to duplicate this behavior on a second SSH host, as well as an IRC server, thus proving (in my mind) that this is an issue wholly within some config on my local host.
UPDATE 2: Also worth noting that while my localhost has trouble with these outbound connections, other clients (including on one, and one off, my LAN) have no issues whatsoever to any of the same remote hosts, or any other hosts. Again, leading me to believe that this is solely some config issue within localhost (but maybe I'm wrong?).
UPDATE 3: I have removed the openssh package (and configs) from localhost and reinstalled, to no avail.
A timeout could happen if you have a high cpu load on your local machine, i had that issue sometimes a few years ago. My Backup process back then did eat my IO + cpu.
As the server i connected to was GPRS and therefor slow by design i did not immediately think of the local host as a problem.
Additionally you might as you said have a limit of connections you are able to use to.
personally i would check the packets with something like wireshark.
1) Do you have GSSAPIAuthentication enabled? Try setting that to "no" in /etc/ssh/sshd_config
2) Have you checked if this is a DNS lookup issue? Try adding the destination host and its ip address to /etc/hosts and retry your ssh connect
3) To do your tcpdump, you can use the following:
tcpdump -n "port 22 and dst <ip address of destination host>"
4) Can you post the full output of the -vvv debug? Or was that it? Can you show what it says after the timeout?
On any occasion where it hangs, you can also simply do netstat -an | grep <ip of remote host>
and if the "State" field is "SYN_SENT" then you know it's being blocked on some level.