Hinweis: Dies begann als ein “How to debug”-Tutorial, endete aber als die Lösung, die mir auf einem Ubuntu 16.04 LTS-Server half.
TLDR : Führen Sie landscape-sysinfo
aus und überprüfen Sie, ob dieser Befehl lange braucht, bis er beendet ist; es ist der Ausdruck der Systeminformationen bei einer neuen SSH-Anmeldung. Beachten Sie, dass dieser Befehl nicht auf allen Systemen verfügbar ist, das Paket landscape-common
installiert ihn. (“But wait, there’s more…”)
Starten Sie einen zweiten SSH-Server an einem anderen Port auf dem Rechner, der das Problem hat, tun Sie dies im Debug-Modus, was ihn nicht zum Forken bringt und Debug-Meldungen ausgibt:
sudo /usr/sbin/sshd -ddd -p 44321
Verbinden Sie sich mit diesem Server von einer anderen Maschine im ausführlichen Modus:
ssh -vvv -p 44321 username@server
Mein Client gibt die folgenden Zeilen aus, kurz bevor er zu schlafen beginnt:
debug1: Entering interactive session.
debug1: pledge: network
Googeln ist nicht wirklich hilfreich, aber die Serverprotokolle sind besser:
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
Ich habe festgestellt, dass dieses Problem behoben ist, wenn ich UsePAM yes
in UsePAM no
ändere.
Hat nichts mit UseDNS
oder einer anderen Einstellung zu tun, nur UsePAM
betrifft dieses Problem auf meinem System.
Ich habe keine Ahnung, warum, und ich lasse auch UsePAM
nicht auf no
, weil ich nicht weiß, was die Nebeneffekte sind, aber das lässt mich weiter forschen.
Betrachten Sie dies also bitte nicht als Antwort, sondern als einen ersten Schritt, um herauszufinden, was falsch ist.
Also forschte ich weiter und ließ sshd
mit strace
(sudo strace /usr/sbin/sshd -ddd -p 44321
) laufen. Dies ergab das Folgende:
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
Die Zeile /etc/update-motd.d
machte mich misstrauisch, anscheinend wartet der Prozess auf das Ergebnis des Zeugs, das in /etc/update-motd.d
steht. Also habe ich cd
mit /etc/update-motd.d
laufen lassen, um PAM daran zu hindern, alle Dateien auszuführen, die dieses dynamische sudo chmod -x *
erzeugen, was auch die Systemlast einschließt und ob Pakete aktualisiert werden müssen, und dies löste das Problem.
Dies ist ein Server, der auf einer “energieeffizienten” N3150-CPU basiert, die rund um die Uhr eine Menge Arbeit zu erledigen hat, so dass ich denke, dass das Sammeln all dieser motd-Daten einfach zu viel für ihn war.
Ich werde vielleicht anfangen, die Skripte in diesem Ordner selektiv zu aktivieren, um zu sehen, welche weniger schädlich sind, aber speziell der Aufruf von Message Of The Day
ist sehr langsam, und landscape-sysinfo
ruft diesen Befehl auf. Ich denke, das ist derjenige, der die größte Verzögerung verursacht.
Nachdem ich die meisten Dateien wieder aktiviert hatte, kam ich zu dem Schluss, dass50-landscape-sysinfo
und 50-landscape-sysinfo
die Ursache für meine Probleme waren. 99-esm
brauchte etwa 5 Sekunden zur Ausführung und 50-landscape-sysinfo
etwa 3 Sekunden. Alle anderen Dateien insgesamt etwa 2 Sekunden.
und 99-esm
sind beide nicht entscheidend. 50-landscape-sysinfo
gibt interessante Systemstatistiken aus (und auch, wenn Sie wenig Speicherplatz haben!), und 99-esm
gibt Meldungen aus, die mit 50-landscape-sysinfo
zusammenhängen. Schließlich können Sie ein Skript mit 99-esm
erstellen und diesen Ausdruck auf Anfrage erhalten.