La nouvelle connexion SSH commence à se bloquer (pas à rejeter ni à terminer) après un jour ou deux sur le serveur Ubuntu 13.04

31

Récemment, nous avons mis à niveau le serveur du serveur 12.04 LTS au 13.04. Tout allait bien, y compris après un redémarrage. Avec tous les paquets mis à jour, nous avons commencé à voir un problème étrange, ssh fonctionne pendant environ un jour (peu clair sur le calendrier) puis une demande ultérieure de SSH se bloque (ne peut pas ctrl + c, rien).

Il est en place et sert le trafic du serveur Web, etc.

Le port 22 est ouvert (ips etc. légèrement modifié pour la publication):

nmap -T4 -A x.acme.com

Starting Nmap 6.40 ( http://nmap.org ) at 2013-09-12 16:01 CDT
Nmap scan report for x.acme.com (69.137.56.18)
Host is up (0.026s latency).
rDNS record for 69.137.56.18: c-69-137-56-18.hsd1.tn.provider.net
Not shown: 998 filtered ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.1p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 54:d3:e3:38:44:f4:20:a4:e7:42:49:d0:a7:f1:3e:21 (DSA)
| 2048 dc:21:77:3b:f4:4e:74:d0:87:33:14:40:04:68:33:a6 (RSA)
|_256 45:69:10:79:5a:9f:0b:f0:66:15:39:87:b9:a1:37:f7 (ECDSA)
80/tcp open  http    Jetty 7.6.2.v20120308
| http-title: Log in as a Bamboo user - Atlassian Bamboo
|_Requested resource was http://x.acme.com/userlogin!default.action;jsessionid=19v135zn8cl1tgso28fse4d50?os_destination=%2Fstart.action
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.89 seconds

Voici le ssh -vvv:

ssh -vvv x.acme.com
OpenSSH_5.9p1, OpenSSL 0.9.8x 10 May 2012
debug1: Reading configuration data /Users/tfergeson/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to x.acme.com [69.137.56.18] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/tfergeson/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /Users/tfergeson/.ssh/id_rsa type 1
debug1: identity file /Users/tfergeson/.ssh/id_rsa-cert type -1
debug1: identity file /Users/tfergeson/.ssh/id_dsa type -1
debug1: identity file /Users/tfergeson/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.1p1 Debian-4
debug1: match: OpenSSH_6.1p1 Debian-4 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "x.acme.com" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:10
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],ssh-rsa
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: [email protected],[email protected],ssh-rsa,[email protected],[email protected],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,[email protected]
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,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected],zlib
debug2: kex_parse_kexinit: none,[email protected],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: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,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,ecdsa-sha2-nistp256
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,[email protected]
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,[email protected]
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,[email protected],hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,[email protected]
debug2: kex_parse_kexinit: none,[email protected]
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-ctr hmac-md5 none
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr 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: 130/256
debug2: bits set: 503/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA dc:21:77:3b:f4:4e:74:d0:87:33:14:40:04:68:33:a6
debug3: load_hostkeys: loading entries for host "x.acme.com" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:10
debug3: load_hostkeys: loaded 1 keys
debug3: load_hostkeys: loading entries for host "69.137.56.18" from file "/Users/tfergeson/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/tfergeson/.ssh/known_hosts:6
debug3: load_hostkeys: loaded 1 keys
debug1: Host 'x.acme.com' is known and matches the RSA host key.
debug1: Found key in /Users/tfergeson/.ssh/known_hosts:10
debug2: bits set: 493/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: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/tfergeson/.ssh/id_rsa (0x7ff189c1d7d0)
debug2: key: /Users/tfergeson/.ssh/id_dsa (0x0)
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
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: Offering RSA public key: /Users/tfergeson/.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 3c:e5:29:6c:9d:27:d1:7d:e8:09:a2:e8:8e:6e:af:6f
debug3: sign_and_send_pubkey: RSA 3c:e5:29:6c:9d:27:d1:7d:e8:09:a2:e8:8e:6e:af:6f
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to x.acme.com ([69.137.56.18]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 3 setting TCP_NODELAY
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug3: Ignored env ATLAS_OPTS
debug3: Ignored env rvm_bin_path
debug3: Ignored env TERM_PROGRAM
debug3: Ignored env GEM_HOME
debug3: Ignored env SHELL
debug3: Ignored env TERM
debug3: Ignored env CLICOLOR
debug3: Ignored env IRBRC
debug3: Ignored env TMPDIR
debug3: Ignored env Apple_PubSub_Socket_Render
debug3: Ignored env TERM_PROGRAM_VERSION
debug3: Ignored env MY_RUBY_HOME
debug3: Ignored env TERM_SESSION_ID
debug3: Ignored env USER
debug3: Ignored env COMMAND_MODE
debug3: Ignored env rvm_path
debug3: Ignored env COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/tfergeson/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET
debug3: Ignored env JPDA_ADDRESS
debug3: Ignored env APDK_HOME
debug3: Ignored env SSH_AUTH_SOCK
debug3: Ignored env Apple_Ubiquity_Message
debug3: Ignored env __CF_USER_TEXT_ENCODING
debug3: Ignored env rvm_sticky_flag
debug3: Ignored env MAVEN_OPTS
debug3: Ignored env LSCOLORS
debug3: Ignored env rvm_prefix
debug3: Ignored env PATH
debug3: Ignored env PWD
debug3: Ignored env JAVA_HOME
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug3: Ignored env JPDA_TRANSPORT
debug3: Ignored env rvm_version
debug3: Ignored env M2_HOME
debug3: Ignored env HOME
debug3: Ignored env SHLVL
debug3: Ignored env rvm_ruby_string
debug3: Ignored env LOGNAME
debug3: Ignored env M2_REPO
debug3: Ignored env GEM_PATH
debug3: Ignored env AWS_RDS_HOME
debug3: Ignored env rvm_delete_flag
debug3: Ignored env EC2_PRIVATE_KEY
debug3: Ignored env RUBY_VERSION
debug3: Ignored env SECURITYSESSIONID
debug3: Ignored env EC2_CERT
debug3: Ignored env _
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768

Je peux redémarrer (uniquement les moniteurs Mac à cet endroit) et il sera à nouveau accessible. Cela se produit maintenant à chaque fois. Il est impératif que je le trie. Ce qui est étrange, c'est qu'il se comporte initialement puis commence à se bloquer après plusieurs heures. J'ai parcouru les journaux précédemment et rien ne ressortait.

Depuis le journal auth.log, je peux voir qu'il m'a permis d'entrer, mais je ne reçois toujours rien du côté client:

Sep 20 12:47:50 cbear sshd[25376]: Accepted publickey for tfergeson from 10.1.10.14 port 54631 ssh2
Sep 20 12:47:50 cbear sshd[25376]: pam_unix(sshd:session): session opened for user tfergeson by (uid=0)

MISES À JOUR:

Se produisant toujours même après avoir réglé UseDNS noet commenté#session optional pam_mail.so standard noenv

Cela ne semble pas être un problème lié au réseau / DNS, car tous les services exécutés sur la machine sont toujours aussi réactifs et accessibles, à l'exception de sshd.

Des réflexions sur où commencer?

Kross
la source
J'ai eu un problème similaire une fois et j'ai pu le résoudre, mais je ne me souviens pas comment. C'était il y a quelques années. Il y avait quelques paramètres de tampons dans /etc/sysctl.conf, je pense. De plus, le redémarrage du «réseautage» a corrigé le problème, mais ce n'est évidemment pas une solution. Ce n'est pas une réponse, mais peut-être peut-être un point de départ. Bonne chance quand même :)
Jo-Erlend Schinstad
Je désactive les motdéléments référencés dans ce post pour essayer de m'assurer que ce n'est pas un problème.
kross
Cela vient de se reproduire, donc ce n'est certainement pas motdlié.
kross
Je ne trouve aucune autre suggestion. Bien que je ne pense pas que ce soit le problème, je voulais éliminer au moins un problème potentiel. Ajouté UseDNS noau /etc/ssh/sshd_config.
kross
1
Toujours en cours, j'aimerais mettre une prime sur cela, mais ne disposer que de points de stackoverflow ...
kross

Réponses:

30

Depuis la page SshAccess sur le wiki de documentation GNU Savannah :

Un problème peut survenir lorsque vous essayez de vous connecter derrière un routeur NAT à l'aide d'OpenSSH. Pendant la configuration de la session, une fois le mot de passe donné, OpenSSH définit le champ TOS (type de service) dans le datagramme IP. Certains routeurs sont connus pour s'étouffer à ce sujet. L'effet est que votre session se bloque indéfiniment après avoir donné votre mot de passe. Voici l'exemple de sortie d'une telle session ssh:

user@localhost:~$ ssh -vvv {user-name}@cvs.savannah.gnu.org
OpenSSH_4.7p1 Debian-8ubuntu1.2, OpenSSL 0.9.8g 19 Oct 2007
debug1: Reading configuration data /etc/ssh/ssh_config
[...]
Enter passphrase for key '{homedir}/.ssh/id_rsa':
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
[...]
debug2: fd 5 setting TCP_NODELAY
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768

et à partir de là, la session se bloque.

Le correctif consiste à faire en sorte que ssh envoie tout son trafic via netcat, car netcat ne définira pas le champ TOS. Pour que cela fonctionne, vous devez avoir installé netcat. Vous pouvez le tester en entrant sur la ligne de commande:

user@localhost:~$ which nc

et si vous obtenez un chemin de retour, comme:

/bin/nc

alors vous avez probablement installé netcat. Pour les très prudents, vous pouvez également émettre:

user@localhost:~$ nc -h

et regardez le texte d'aide à venir. Si vous n'avez pas netcat, vous pouvez le trouver sur http://netcat.sourceforge.net/ . Vous pouvez également essayer le système de conditionnement fourni avec la distribution de votre système d'exploitation.

Une fois que vous avez constaté que Netcat est installé, exécutez la commande suivante pour tester si la route Netcat résout votre problème:

ssh -o "ProxyCommand nc %h %p" {user-name}@cvs.savannah.gnu.org

où {nom_utilisateur} est votre nom de connexion de savane. Pour une connexion réussie, vous devriez obtenir une sortie similaire à celle-ci (sans suspension, c'est-à-dire que vous obtenez une invite par la suite):

user@localhost:~$ ssh -o "ProxyCommand nc %h %p" {user-name}@cvs.savannah.gnu.org
Enter passphrase for key '{home-dir}/.ssh/id_rsa': 
Last login: {datetime} from {ip-adr} 
You tried to execute: 
Sorry, you are not allowed to execute that command. 
Connection to cvs.savannah.gnu.org closed. 
user@localhost:~$

Si vous trouvez que votre connexion fonctionne via la route netcat, vous pouvez la rendre permanente en ajoutant une directive au fichier de configuration ssh ~/.ssh/config(ou, si ce fichier n'existe pas, créez-la):

ProxyCommand nc %h %p

Voici un exemple de fichier de configuration ssh dans le dossier de départ d'un utilisateur (/home/user/.ssh/config):

# This is the ssh client user configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# this user, and the values can be changed on the command line.
#
# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.
#
# Directive to overcome TOS issue with our NAT router. During session setup,
# OpenSSH sets the TOS (type of service) field after the user has submitted
# the password. Some routers are known to choke on this, with the result
# that the session hangs during buildup. As workaround we send our traffic
# via netcat which doesn't set the TOS field.
ProxyCommand nc %h %p

Il est conseillé de mettre également les commentaires, sinon six mois plus tard, vous vous demanderez peut-être en quoi consiste cette directive ??

Vous pouvez également ajouter cette directive à votre fichier de configuration global ssh ( /etc/ssh/ssh_config), mais cette modification serait à l'échelle du système et tous les utilisateurs de votre système pourraient ne pas apprécier cette modification.

jogi3000
la source
7
Le plagiat n'est pas cool
Gilles 'SO- arrête d'être méchant'
Génial, merci de m'avoir aidé ici. Ça a dû être un cauchemar pour déboguer. Pour mémoire, cela se produit pour moi lorsque je suis sur un WiFi stupide spécifique, j'ai donc modifié mon ssh_configcomme suit: Match exec "iw dev | grep -q stupid_wifi_ssid" ProxyCommand nc %h %p
Florian Echtler
7

ssh -o IPQoS=0 x.acme.com devrait indiquer à openssh d'arrêter de définir le champ QoS qui est étouffé.

Carey Underwood
la source
Résolu pour moi. Fait intéressant, une autre machine sur mon réseau local ne rencontrait pas ce problème. J'essaierais ceci, avant d'essayer le routage netcat.
Dominykas Mostauskis
2

Aussi ridicule que cela puisse paraître, la seule solution de contournement que j'ai à ce moment est de planifier un redémarrage nocturne. Heureusement, cette solution de contournement n'est acceptable que parce qu'il s'agit d'une machine de développement, si elle avait été une machine de production, j'aurais eu des ennuis.

Je déteste ça, mais je voulais être sûr que ceux qui trouvent ce fil savent que je n'ai pas de solution. Ajouté à la racine crontab pour un redémarrage nocturne à 4 heures du matin:

0 4 * * * /sbin/shutdown -r +5
Kross
la source
1
J'ai exactement le même problème avec sshd.exe fonctionnant sous cygwin sur win7. Je me demande si c'est un bogue multiplateforme dans sshd?
Kev
2

J'ai eu le problème derrière un NAT avec ssh. J'ai essayé "mosh" avec les options ssh et tout fonctionne parfaitement. Installer mosh

Juan Zamora
la source
1
Je recommande de modifier cette réponse pour la développer avec des détails spécifiques sur la façon de procéder. (Voir aussi Comment puis-je écrire une bonne réponse? Pour des conseils généraux sur les types de réponses considérées comme les plus utiles sur AskUbuntu.)
David Foerster
1

J'ai eu un gel de gnome-keyring-daemon sur moi assis à 100% CPU sur Ubuntu 18.04.

sudo killall -9 gnome-keyring-daemon

A corrigé. ...Pour l'instant

Dagelf
la source
Zut! totalement travaillé pour moi aussi!
Nicholas DiPiazza