Je constate des retards dans les connexions SSH. Plus précisément, il y a deux endroits où je vois une plage de délais instantanée à plusieurs secondes.
- Entre l’émission de la commande ssh et l’obtention d’une invite de connexion et
- entre la saisie de la phrase secrète et la charge du shell
Maintenant, spécifiquement, je regarde les détails SSH seulement ici. Évidemment, la latence du réseau, la vitesse du matériel et des systèmes d'exploitation impliqués, des scripts de connexion complexes, etc. peuvent entraîner des retards. Pour le contexte, ssh utilise une multitude de distributions Linux et certains hôtes Solaris qui utilisent principalement Ubuntu, CentOS et MacOS X comme système client. Presque tout le temps, la configuration du serveur ssh est inchangée par rapport aux paramètres par défaut du système d'exploitation.
À quelles configurations de serveur ssh devrais-je m'intéresser? Existe-t-il des paramètres système / noyau pouvant être ajustés? Connexion astuces shell? Etc?
Réponses:
Essayez de régler
UseDNS
àno
dans/etc/sshd_config
ou/etc/ssh/sshd_config
.la source
ssh -vvv
)./etc/ssh/sshd_config
! J'ajoutais/etc/sshd_config
et je ne voyais aucune différence !!Quand j'ai couru
ssh -vvv
sur un serveur avec une performance similaire lente, j'ai vu un blocage ici:En modifiant
/etc/ssh/ssh_config
et en commentant cette méthode d'authentification, les performances de connexion sont redevenues normales. Voici ce que j'ai/etc/ssh/ssh_config
sur le serveur:Vous pouvez définir ceci globalement sur le serveur, de sorte qu'il n'accepte pas que GSSAPI s'authentifie. Ajoutez simplement
GSSAPIAuthentication no
à/etc/ssh/sshd_config
sur le serveur et redémarrez le service.la source
GSSAPIAuthentication no
etUseDNS no
dans le/etc/ssh/sshd_config
fichier.Pour moi, le coupable était la résolution IPv6, le délai était écoulé. (Je suppose que le paramètre DNS est mauvais chez mon fournisseur d’hôte.) C’est ce que j’ai découvert, ce
ssh -v
qui a montré quelle étape était suspendue.La solution consiste à
ssh
avec l'-4
option:ssh -4 [email protected]
la source
debug2: resolving "thing.net.au" port 22
sans erreur, mais cela ne se produit pas avec -4, ce qui indique qu'il s'agit d'un problème DNS IPv6.Avec systemd, la connexion peut se bloquer sur la communication dbus avec logind après certaines mises à niveau, vous devez alors redémarrer logind.
Vu cela sur debian 8, arch linx et sur une liste de choix
la source
Vous pouvez toujours commencer
ssh
avec l'-v
option qui affiche ce qui est fait pour le moment.Avec les informations que vous avez données, je ne peux que suggérer certaines configurations côté client:
Puisque vous écrivez que vous entrez les mots de passe manuellement, je vous suggérerais d'utiliser l'authentification par clé publique si possible. Cela vous élimine comme un goulot d'étranglement.
Vous pouvez également désactiver X-forwarding avec
-x
et authentification-a
(ceux-ci sont peut-être déjà désactivés par défaut). En particulier, la désactivation de X-forwarding peut vous apporter une grande amélioration enssh
termes de vitesse si votre client doit démarrer un serveur X pour la commande (par exemple sous OS X).Tout le reste dépend vraiment du type de retard que vous rencontrez, où et quand.
la source
En ce qui concerne le point 2., voici une réponse qui ne nécessite pas de modifier le serveur ni d’avoir les privilèges root / administratif.
Vous devez éditer votre fichier "user ssh_config" qui est:
(Remarque: vous devrez créer le répertoire $ HOME / .ssh s'il n'existe pas)
Et ajouter:
Vous pouvez le faire par hôte si nécessaire :) exemple:
Assurez-vous que l'adresse IP correspond à l'adresse IP de votre serveur. Un avantage intéressant est que ssh fournira maintenant la saisie semi-automatique pour ce serveur. Donc, vous pouvez taper
ssh lin
+Tab
et il devrait compléter automatiquementssh linux-srv
.la source
Vérifiez
/etc/resolv.conf
sur le serveur que le serveur DNS, répertorié dans ce fichier, fonctionne correctement et supprimez tout DNS qui ne fonctionne pas.Parfois, c'est très utile.
la source
Outre les problèmes DNS déjà mentionnés, si vous êtes connecté à un serveur avec de nombreux montages NFS, il peut y avoir un délai entre mot de passe et invite, car la
quota
commande vérifie votre utilisation / quota sur tous les systèmes de fichiers non montés avecnoquota
. Sur les systèmes Solaris, vous pouvez le voir par défaut/etc/profile
et le ignorer en le faisant fonctionnertouch $HOME/.hushlogin
.la source
Travailler bien.
UseDNS no ne fonctionne pas avec OpenIndiana !!!
Lisez "man sshd_config" pour toutes les options
"LookupClientHostnames no" si votre serveur ne peut pas résoudre
la source
Si aucune des réponses ci-dessus ne fonctionne et que vous rencontrez des problèmes de recherche inversée DNS, vous pouvez également vérifier si
nscd
(démon cache de service de noms) est installé et en cours d'exécution.Si tel est le problème, c’est que vous n’avez pas de cache DNS, et chaque fois que vous recherchez un nom d’hôte qui ne figure pas sur votre fichier hôte, vous envoyez la question à votre serveur de noms au lieu de chercher dans votre cache.
J'ai essayé toutes les options ci-dessus et le seul changement qui a fonctionné a été de commencer
nscd
.Vous devez également vérifier l'ordre de résolution des requêtes DNS
/etc/nsswitch.conf
afin d'utiliser d'abord le fichier hosts.la source
Ceci est probablement uniquement spécifique à l’OpenSSH Debian / Ubuntu, qui comprend le groupe user-group-modes.patch écrit par l’un des responsables de la maintenance du paquet Debian. Ce correctif permet aux fichiers ~ / .ssh de définir le bit d’inscription de groupe (g + w) s’il n’ya qu’un seul utilisateur avec le même gid que celui du fichier. La fonction secure_permissions () du patch effectue cette vérification. L'une des phases de la vérification consiste à parcourir chaque entrée de mot de passe à l'aide de getpwent () et à comparer le gid de l'entrée avec le gid du fichier.
Sur un système comportant de nombreuses entrées et / ou une authentification lente NIS / LDAP, cette vérification sera lente. nscd ne met pas en cache les appels getpwent (), donc chaque entrée de mot de passe sera lue sur le réseau si le serveur n’est pas local. Sur le système, j'ai trouvé cela, il a ajouté environ 4 secondes pour chaque invocation de ssh ou connexion au système.
Le correctif consiste à supprimer le bit en écriture sur tous les fichiers de ~ / .ssh en le faisant
chmod g-w ~/.ssh/*
.la source
J'ai constaté que le redémarrage de systemd-logind.service ne réglait le problème que pendant quelques heures. La modification de UsePAM de oui à non dans sshd_config a entraîné des connexions rapides, bien que motd ne soit plus affiché. Des commentaires sur des problèmes de sécurité?
la source
Pour compléter toutes les réponses montrant que les résolutions DNS peuvent ralentir votre connexion SSH, il manque parfois une règle de pare-feu. Par exemple, si vous supprimez tous les paquets INPUT par défaut
alors vous devrez accepter INPUT pour le port ssh et la requête DNS
la source
ssh -vvv
La connexion s’est très bien déroulée jusqu’à ce que le système tente de récupérer le terminal pendant au moins 20 secondes:Après avoir fait un
systemctl restart systemd-logind
sur le serveur, j'ai eu une connexion instantanée à nouveau!C'était sur debian8 ! Donc, le problème était ici!
Remarque: Bastien Durel a déjà donné une réponse à ce problème, mais les informations de débogage manquent. J'espère que cela est utile à quelqu'un.
la source
session [default=1] pam_lastlog.so nowtmp showfailed
dans/etc/pam.d/postlogin
. Apparemment, la mise à jour du fichier lastlog a été incroyablement lente sous OpenVZ VPS basé sur un conteneur.J'ai récemment trouvé une autre cause de connexions ssh lentes.
Même si vous avez
UseDNS no
à/etc/sshd_config
, sshd peut encore effectuer des recherches DNS inverses si/etc/hosts.deny
a une entrée comme:Cela peut arriver si DenyHosts est installé sur votre système.
Ce serait formidable si quelqu'un savait comment faire en sorte que DenyHosts évite de mettre ce type d'entrée dans
/etc/hosts.deny
.Voici un lien vers la FAQ DenyHosts pour savoir comment supprimer des entrées de
/etc/hosts.deny
- voir Comment puis-je supprimer une adresse IP bloquée par DenyHosts?la source
Nous pouvons constater que la méthode de résolution de noms préférée n'est pas le fichier hôte, puis DNS.
Par exemple, ce serait la configuration habituelle:
Tout d'abord, le fichier hosts est atteint (option: fichiers), puis DNS (option: dns). Cependant, nous pouvons constater qu'un autre système de résolution de noms a été ajouté. Il n'est pas opérationnel et nous ralentit lorsque nous essayons de faire la résolution inverse.
Si l'ordre de résolution de nom n'est pas correct, vous pouvez le modifier à l'adresse suivante:
/etc/nsswitch.conf
Extrait de: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html
la source
J'ai essayé toutes les réponses mais aucune d'entre elles n'a fonctionné. enfin je découvre mon problème:
Je lance d'abord
sudo tail -f /var/log/auth.log
pour que je puisse voir le journal de SSH puis dans une autre sessionssh 172.16.111.166
et remarqué d'attendreaprès avoir cherché, j'ai trouvé cette ligne dans / etc / ssd / ssh_config
Je l'ai commenté et le délai est passé
la source
Note: Ceci a commencé comme un tutoriel "Comment déboguer", mais a fini par être la solution qui m'a aidé sur un serveur Ubuntu 16.04 LTS.
TLDR : Exécuter
landscape-sysinfo
et vérifier si cette commande prend beaucoup de temps pour se terminer; c'est l'impression des informations système sur une nouvelle connexion SSH. Notez que cette commande n'est pas disponible sur tous les systèmes, lelandscape-common
package l'installe. ("Mais attendez, il y a plus ...")Démarrez un deuxième serveur ssh sur un autre port de la machine qui a le problème, faites-le en mode débogage, ce qui ne le fera pas changer et affichera les messages de débogage:
connectez-vous à ce serveur à partir d'une autre machine en mode prolixe:
Mon client affiche les lignes suivantes juste avant de commencer à dormir:
Googler ce n'est pas vraiment utile, mais les journaux du serveur sont meilleurs:
J'ai remarqué que lorsque je change
UsePAM yes
d'UsePAM no
alors ce problème est résolu.Non lié à
UseDNS
ou à tout autre paramètre,UsePAM
affecte uniquement ce problème sur mon système.Je n'ai pas la moindre idée pourquoi, et je suis pas non plus laisser
UsePAM
àno
, parce que je ne sais pas que les effets secondaires sont, mais cela me permet de continuer à enquêter.Alors, s'il vous plaît, ne considérez pas cela comme une réponse, mais comme une première étape pour commencer à découvrir ce qui ne va pas.
J'ai donc continué à enquêter et j'ai couru
sshd
avecstrace
(sudo strace /usr/sbin/sshd -ddd -p 44321
). Cela a donné ce qui suit:La ligne
/etc/update-motd.d
m'a rendu méfiant, apparemment le processus attend le résultat de la chose qui est dans/etc/update-motd.d
Donc , je
cd
« d en/etc/update-motd.d
et a couru unsudo chmod -x *
pour inhiber PAM pour exécuter tous les fichiers qui génèrent cette dynamiqueMessage Of The Day
, qui comprend la charge du système et si les paquets doivent être mis à jour, et ce résolu la question.Ceci est un serveur basé sur un processeur N3150 "économe en énergie" qui a beaucoup de travail à faire 24h / 24, donc je pense que la collecte de toutes ces données motd était trop pour elle.
Je peux commencer à activer les scripts de ce dossier de manière sélective, afin de voir ceux qui sont moins nocifs, mais appeler spécialement
landscape-sysinfo
est très lent et50-landscape-sysinfo
appelle cette commande. Je pense que c'est celui qui cause le plus gros retard.Après la plupart des réactivation des fichiers que je suis venu à la conclusion que
50-landscape-sysinfo
et99-esm
étaient la cause de mes ennuis.50-landscape-sysinfo
a pris environ 5 secondes pour exécuter et99-esm
environ 3 secondes. Tous les fichiers restants environ 2 secondes au total.Ni
50-landscape-sysinfo
et99-esm
sont cruciaux.50-landscape-sysinfo
affiche des statistiques système intéressantes (et aussi si vous manquez d'espace!) et99-esm
affiche des messages relatifs àUbuntu Extended Security Maintenance
Enfin, vous pouvez créer un script avec
echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh
et obtenir cette impression sur demande.la source
Ce fil fournit déjà un tas de solutions, mais le mien n’est pas donné ici =). Alors le voici. Mon problème (il a fallu environ 1 minute pour que SSH se connecte à mon Raspberry Pi), était dû à un fichier .bash_history corrompu. Étant donné que le fichier est lu lors de la connexion, cela entraînait un délai de connexion. Une fois le fichier supprimé, le temps de connexion est revenu à la normale, de manière instantanée.
J'espère que cela aidera d'autres personnes.
la source
Pour moi, j'avais besoin de GSSAPI et je ne voulais pas désactiver les recherches DNS inversées. Cela ne semblait pas être une bonne idée, alors j’ai vérifié la page principale de resolv.conf. Il s'est avéré qu'un pare-feu entre moi et les serveurs sur lesquels je travaillais sous SSH interférait avec les requêtes DNS, car elles ne se présentaient pas sous la forme attendue par le pare-feu. En fin de compte, tout ce que j'avais à faire était d'ajouter cette ligne à resolv.conf sur les serveurs pour lesquels j'étais SSHing:
options single-request-reopen
Un séjour sans faillela source
Remarquablement, une mise à jour du paquet de bind sur CentOS 7 a été nommée de manière erronée, indiquant maintenant dans le journal que /etc/named.conf avait un problème d’autorisations. Cela fonctionnait bien depuis des mois avec 0640. Maintenant, il veut 0644. Cela a du sens, car le démon nommé appartient à l'utilisateur 'nommé'.
Avec le nom choisi, tout était lent, des connexions ssh aux serveurs de pages du serveur Web local, en passant par les applications LAMP lentes, etc., probablement parce que chaque requête expirait sur le serveur local inactif avant de rechercher un DNS secondaire externe configuré.
la source
Pour moi, il y avait un problème dans mon
/etc/hosts
fichier local . Nousssh
avons donc essayé deux adresses IP différentes (une fausse), ce qui a pris une éternité.L'utilisation a
ssh -v
fait le tour ici:la source
/etc/hosts
du serveur?