Note : Cela a commencé comme un “Comment déboguer”, tutoriel, mais a fini par être la solution qui m'a aidé sur un serveur Ubuntu 16.04 LTS.
TLDR : Lancez landscape-sysinfo
et vérifiez si cette commande prend beaucoup de temps pour se terminer ; c'est l'impression des informations système sur un nouveau login SSH. Notez que cette commande n'est pas disponible sur tous les systèmes, c'est le paquet landscape-common
qui l'installe. (“Mais attendez, il y a plus…”)
Démarrez un second 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 bifurquer et imprimera des messages de débogage :
sudo /usr/sbin/sshd -ddd -p 44321
se connecter à ce serveur depuis une autre machine en mode verbeux :
ssh -vvv -p 44321 username@server
Mon client sort les lignes suivantes juste avant de commencer à dormir :
debug1: Entering interactive session.
debug1: pledge: network
Googler ce n'est pas vraiment utile, mais les journaux du serveur sont meilleurs :
debug3: mm_send_keystate: Finished sending state [preauth]
debug1: monitor_read_log: child log fd closed
debug1: PAM: establishing credentials
debug3: PAM: opening session
---- Pauses here ----
debug3: PAM: sshpam_store_conv called with 1 messages
User child is on pid 28051
J'ai remarqué que lorsque je change UsePAM yes
en UsePAM no
alors ce problème est résolu.
n'est pas lié à UseDNS
ou à un autre paramètre, seul UsePAM
affecte ce problème sur mon système.
Je ne sais pas pourquoi, et je ne laisse pas non plus UsePAM
à no
, parce que je ne sais pas quels sont les effets secondaires, 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 un premier pas pour commencer à trouver ce qui ne va pas.
Donc j'ai continué à enquêter, et j'ai fait sshd
avec strace
(sudo strace /usr/sbin/sshd -ddd -p 44321
). Cela a donné le résultat suivant :
sendto(4, "<87>Nov 20 20:35:21 sshd[2234]: "..., 110, MSG_NOSIGNAL, NULL, 0) = 110
close(5) = 0
stat("/etc/update-motd.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
umask(022) = 02
rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffde6152d2c) = 2385
wait4(2385, # BLOCKS RIGHT HERE, BEFORE THE REST IS PRINTED OUT # [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2385
La ligne /etc/update-motd.d
m'a rendu suspect, apparemment le processus attend le résultat de ce qui est dans /etc/update-motd.d
Donc j'ai cd
dans /etc/update-motd.d
et j'ai lancé un sudo chmod -x *
afin d'empêcher PAM d'exécuter tous les fichiers qui génèrent ce Message Of The Day
dynamique, ce qui inclut la charge du système et si les paquets doivent être mis à jour, et cela a résolu le problème.
Il s'agit d'un serveur basé sur un processeur N3150 “économe en énergie” qui a beaucoup de travail à faire 24 heures sur 24, 7 jours sur 7, donc je pense que collecter toutes ces motd-data était juste trop pour lui.
Je peux commencer à activer les scripts dans ce dossier de manière sélective, pour voir lesquels sont moins nocifs, mais appeler spécialement landscape-sysinfo
est très lent, et 50-landscape-sysinfo
appelle effectivement cette commande. Je pense que c'est celle qui provoque le plus grand retard.
Après avoir réactivé la plupart des fichiers, je suis arrivé à la conclusion que50-landscape-sysinfo
et 99-esm
étaient la cause de mes problèmes. 50-landscape-sysinfo
a pris environ 5 secondes pour s'exécuter et 99-esm
environ 3 secondes. Tous les autres fichiers ont pris environ 2 secondes en tout.
Ni 50-landscape-sysinfo
ni 99-esm
ne sont cruciaux. 50-landscape-sysinfo
imprime des statistiques système intéressantes (et aussi si vous manquez d'espace !), et 99-esm
imprime les 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.