128 votes

Pourquoi mon SSH connexion est lente?

Je constate des retards dans les connexions SSH. Plus précisément, il y a 2 points où je vois un éventail de retards allant de l'instantané à plusieurs secondes.

  1. Entre l'émission de la commande ssh et l'obtention d'un invite de connexion et
  2. entre la saisie de la phrase secrète et le chargement de l'interpréteur de commandes

Maintenant, je me concentre spécifiquement sur les détails du ssh. Évidemment, la latence du réseau, la vitesse du matériel et les systèmes d'exploitation impliqués, des scripts de connexion complexes, etc peuvent causer des retards. Pour contextualiser, je me connecte en ssh à une multitude de distributions Linux et à certains hôtes Solaris en utilisant principalement Ubuntu, CentOS et MacOS X comme systèmes client. La configuration du serveur ssh est presque toujours inchangée par rapport aux paramètres par défaut de l'OS.

Quelles configurations de serveur ssh devrais-je envisager ? Y a-t-il des paramètres OS/noyau à ajuster ? Des astuces pour le shell de connexion ? Etc ?

2voto

alanc Points 1056

Outre les problèmes de DNS déjà mentionnés, si vous vous connectez en ssh à un serveur avec de nombreux montages NFS, il peut y avoir un délai entre le mot de passe et l'invite, car la commande quota vérifie votre utilisation/quota sur tous les systèmes de fichiers non montés avec le noquota. Sur les systèmes Solaris, vous pouvez voir cela dans le profil par défaut /etc/profile et le sauter en exécutant touch $HOME/.hushlogin.

2voto

Gemini420 Points 31

Cela est probablement spécifique uniquement à l'OpenSSH de Debian/Ubuntu, qui inclut le correctif user-group-modes.patch écrit par l'un des mainteneurs du paquet Debian. Ce correctif permet aux fichiers ~/.ssh d'avoir le bit de permission en écriture pour le groupe (g+w) si un seul utilisateur a le même gid que celui du fichier. La fonction secure_permissions() du correctif effectue cette vérification. Une des phases de la vérification consiste à parcourir chaque entrée passwd en utilisant getpwent() et à comparer le gid de l'entrée avec le gid du fichier.

Sur un système avec de nombreuses entrées et/ou une authentification NIS/LDAP lente, cette vérification sera lente. nscd ne met pas en cache les appels getpwent(), donc chaque entrée passwd sera lue sur le réseau si le serveur n'est pas local. Sur le système où j'ai trouvé cela, cela ajoutait environ 4 secondes à chaque invocation de ssh ou de connexion au système.

La solution est de supprimer le bit en écriture sur tous les fichiers dans ~/.ssh en exécutant chmod g-w ~/.ssh/*.

1voto

Hugues Points 19

Travailler bien.

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, protocoles SSH 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh

UseDNS non ne fonctionne pas avec OpenIndiana !!!

Lire "man sshd_config" pour toutes les options

"LookupClientHostnames no" si votre serveur ne peut pas résoudre

1voto

altmas5 Points 320

Si aucune des réponses ci-dessus ne fonctionne et que vous rencontrez des problèmes de résolution inverse de DNS, vous pouvez également vérifier si nscd (démon de cache de service de nom) est installé et en cours d'exécution.

Si c'est le problème, c'est parce que vous n'avez pas de cache DNS, et chaque fois que vous interrogez un nom d'hôte qui ne figure pas dans votre fichier host, vous envoyez la question à votre serveur de noms au lieu de regarder dans votre cache.

J'ai essayé toutes les options ci-dessus et le seul changement qui a fonctionné était de démarrer nscd.

Vous devriez également vérifier l'ordre de résolution des requêtes DNS dans le fichier /etc/nsswitch.conf pour utiliser d'abord le fichier d'hôtes.

1voto

J'ai récemment découvert une autre cause de connexions SSH lentes.

Même si vous avez UseDNS no dans /etc/sshd_config, sshd peut toujours effectuer des recherches DNS inverse si /etc/hosts.deny contient une entrée comme :

nnn-nnn-nnn-nnn.rev.some.domain.com

Cela peut se produire si vous avez DenyHosts installé sur votre système.

Ce serait génial 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 de DenyHosts, sur la façon de supprimer des entrées de /etc/hosts.deny - voir Comment puis-je supprimer une adresse IP bloquée par DenyHosts ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X