2010-07-22 07:02:00 +0000 2010-07-22 07:02:00 +0000
103
103

Warum ist meine SSH-Anmeldung langsam?

Ich sehe Verzögerungen bei SSH-Anmeldungen. Genauer gesagt gibt es 2 Stellen, an denen ich eine Spanne von sofortigen bis mehrsekündigen Verzögerungen sehe.

  1. zwischen der Eingabe des ssh-Befehls und der Anmeldeaufforderung und
  2. zwischen der Eingabe der Passphrase und dem Laden der Shell

Hier betrachte ich nur die Details von ssh. Offensichtlich können Netzwerklatenz, Geschwindigkeit der beteiligten Hardware und Betriebssysteme, komplexe Anmeldeskripte usw. Verzögerungen verursachen. Zum Vergleich: Ich verwende ssh auf einer Vielzahl von Linux-Distributionen und einigen Solaris-Hosts, wobei ich hauptsächlich Ubuntu, CentOS und MacOS X als Client-Systeme verwende. Fast immer ist die Konfiguration des ssh-Servers unverändert gegenüber den Standardeinstellungen des Betriebssystems.

Für welche ssh-Server-Konfigurationen sollte ich mich interessieren? Gibt es OS/Kernel-Parameter, die angepasst werden können? Login-Shell-Tricks? Etc?

Antworten (22)

130
130
130
2010-07-22 08:38:59 +0000

Versuchen Sie, UseDNS auf no in /etc/sshd_config oder /etc/ssh/sshd_config zu setzen.

39
39
39
2010-09-22 17:42:34 +0000

Als ich ssh -vvv auf einem Server mit einer ähnlich langsamen Leistung ausgeführt habe, sah ich hier einen Hänger:

debug1: Next authentication method: gssapi-with-mic

Durch Bearbeiten von /etc/ssh/ssh_config und Auskommentieren dieser Authentifizierungsmethode konnte ich die Anmeldeleistung wieder normalisieren. Hier ist, was ich in meinem /etc/ssh/ssh_config auf dem Server habe:

GSSAPIAuthentication no

Sie können dies global auf dem Server einstellen, sodass er GSSAPI nicht zur Authentifizierung akzeptiert. Fügen Sie einfach GSSAPIAuthentication no zu /etc/ssh/sshd_config auf dem Server hinzu und starten Sie den Dienst neu.

21
21
21
2015-08-14 00:50:20 +0000

Bei mir war der Übeltäter die IPv6-Auflösung, sie war zeitlich begrenzt. (Schlechte DNS-Einstellung bei meinem Host-Provider, schätze ich.) Ich entdeckte dies, indem ich ssh -v ausführte, was zeigte, welcher Schritt hing.

Die Lösung ist ssh mit der Option -4:

ssh -4 me@myserver.com

16
16
16
2015-05-21 09:41:03 +0000

Mit systemd kann die Anmeldung bei der dbus-Kommunikation mit logind nach einigen Upgrades hängen bleiben, dann müssen Sie logind neu starten

systemctl restart systemd-logind

Saw that on debian 8, arch linx, and on a suse list

9
9
9
2010-07-22 08:28:05 +0000

Sie können ssh immer mit der Option -v starten, die anzeigt, was im Moment gemacht wird.

$ ssh -v you@host

Mit den von Ihnen angegebenen Informationen kann ich nur einige clientseitige Konfigurationen vorschlagen:

  • Da Sie schreiben, dass Sie Passwörter manuell eingeben, würde ich vorschlagen, dass Sie wenn möglich eine Authentifizierung mit öffentlichem Schlüssel verwenden. Damit sind Sie als Geschwindigkeitsengpass ausgeschaltet.

  • Sie könnten auch das X-Forwarding mit -x und das Authentifizierungs-Forwarding mit -a deaktivieren (diese könnten bereits standardmäßig deaktiviert sein). Insbesondere das Deaktivieren von X-Weiterleitung kann eine große Geschwindigkeitsverbesserung bringen, wenn Ihr Client für den Befehl ssh einen X-Server starten muss (z. B. unter OS X).

Alles andere hängt wirklich davon ab, welche Arten von Verzögerungen Sie wo und wann erleben.

7
7
7
2012-06-29 07:41:22 +0000

Bezüglich des 2. Punktes ist hier eine Antwort, die weder eine Änderung des Servers noch Root-/Administrationsrechte voraussetzt.

Sie müssen die Datei “user ssh_config” bearbeiten, die wie folgt lautet:

vi $HOME/.ssh/config

(Hinweis: Sie müssen das Verzeichnis $HOME/.ssh erstellen, wenn es nicht existiert)

Und fügen Sie hinzu:

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Sie können dies bei Bedarf pro Host tun :) Beispiel:

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

Stellen Sie sicher, dass die IP-Adresse mit der IP-Adresse Ihres Servers übereinstimmt. Ein cooler Vorteil ist, dass ssh jetzt eine Autovervollständigung für diesen Server bietet. Sie können also ssh lin + Tab eintippen und es sollte automatisch ssh linux-srv vervollständigt werden.

4
4
4
2017-06-08 07:57:20 +0000

Überprüfen Sie /etc/resolv.conf auf dem Server, um sicherzustellen, dass der in dieser Datei aufgeführte DNS-Server ordnungsgemäß funktioniert, und löschen Sie alle nicht funktionierenden DNS.

Manchmal ist es sehr hilfreich.

2
2
2
2010-07-22 14:24:59 +0000

Neben den bereits erwähnten DNS-Problemen kann es, wenn Sie sich mit ssh in einen Server mit vielen NFS-Einhängungen einklinken, zu einer Verzögerung zwischen Kennwort und Eingabeaufforderung kommen, da der Befehl quota auf allen Dateisystemen, die nicht mit noquota eingehängt sind, Ihre Nutzung/Quota überprüft. Auf Solaris-Systemen können Sie dies im Standard /etc/profile sehen und es durch Ausführen von touch $HOME/.hushlogin überspringen.

1
1
1
2013-05-02 23:01:07 +0000

Wenn keine der obigen Antworten funktioniert und Sie Probleme mit dem dns-Reverse-Lookup haben, können Sie auch überprüfen, ob nscd (Nameservice-Cache-Daemon) installiert ist und läuft.

Wenn dies das Problem ist, liegt es daran, dass Sie keinen dns-Cache haben, und jedes Mal, wenn Sie einen Hostnamen abfragen, der nicht in Ihrer Hostdatei steht, senden Sie die Frage an Ihren Nameserver, anstatt in Ihrem Cache zu suchen

Ich habe alle oben genannten Optionen ausprobiert, und die einzige Änderung, die funktionierte, war das Starten von nscd.

Sie sollten auch die Reihenfolge für die Auflösung der DNS-Anfrage in /etc/nsswitch.conf überprüfen, um die Hostdatei zuerst zu verwenden.

1
1
1
2015-10-13 01:19:43 +0000

Dies ist wahrscheinlich nur spezifisch für das Debian/Ubuntu-OpenSSH, das den user-group-modes.patch enthält, der von einem der Debian-Paketbetreuer geschrieben wurde. Dieser Patch erlaubt es den ~/.ssh-Dateien, das Bit “group writable” zu setzen (g+w), wenn es nur einen Benutzer mit der gleichen gid wie die der Datei gibt. Die Funktion secure_permissions() des Patches führt diese Prüfung durch. Eine der Phasen der Prüfung besteht darin, jeden passwd-Eintrag mit getpwent() durchzugehen und die gid des Eintrags mit der gid der Datei zu vergleichen.

Auf einem System mit vielen Einträgen und/oder langsamer NIS/LDAP-Authentifizierung wird diese Prüfung langsam sein. nscd speichert keine getpwent()-Aufrufe, so dass jeder passwd-Eintrag über das Netzwerk gelesen wird, wenn der Server nicht lokal ist. Auf dem System, auf dem ich das gefunden habe, hat es etwa 4 Sekunden für jeden Aufruf von ssh oder die Anmeldung am System hinzugefügt.

Die Lösung ist, das beschreibbare Bit bei allen Dateien in ~/.ssh zu entfernen, indem man chmod g-w ~/.ssh/* macht.

1
1
1
2018-11-20 19:15:56 +0000

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.

1
1
1
2017-07-22 08:21:56 +0000

Ich habe alle Antworten ausprobiert, aber keine davon hat funktioniert. Schließlich habe ich mein Problem herausgefunden:

zuerst habe ich sudo tail -f /var/log/auth.log ausgeführt, damit ich das Protokoll von ssh sehen kann, dann in einer anderen Sitzung ssh 172.16.111.166 ausgeführt und bemerkt, dass ich auf

/usr/bin/sss_ssh_knownhostsproxy -p 22 172.16.111.166

warte& nach der Suche habe ich diese Zeile in /etc/ssd/ssh_config gefunden

ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

Ich habe sie auskommentiert und die Verzögerung ist weg

1
1
1
2012-04-25 13:37:42 +0000

Funktionieren gut.

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

UseDNS no funktioniert nicht mit OpenIndiana !!!

Lesen Sie “man sshd_config” für alle Optionen

“LookupClientHostnames no” wenn Ihr Server nicht auflösen kann

1
1
1
2017-03-04 22:38:38 +0000

ssh -vvv Verbindung ging wirklich gut, bis es auf dem System hing und versuchte, das Terminal für mindestens 20 Sekunden zu bekommen:

debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
... waiting ... waiting ... waiting

Nachdem ich ein systemctl restart systemd-logind auf dem Server gemacht habe, hatte ich wieder eine sofortige Verbindung!

Dies war auf debian8! Also war systemd hier das Problem!

Anmerkung: _Bastien Durel hat bereits eine Antwort für dieses Problem gegeben, allerdings fehlen darin die Debug-Informationen. Ich hoffe, dass dies für jemanden hilfreich ist.**

1
1
1
2017-07-09 09:12:53 +0000

Es kann vorkommen, dass die bevorzugte Methode zur Namensauflösung nicht die Host-Datei und dann DNS ist.

Dies wäre zum Beispiel die übliche Konfiguration:

[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts: db files nisplus nis dns
hosts: files dns myhostname

Zuerst wird die Hostdatei erreicht (Option: files) und dann DNS (Option: dns), wir können jedoch feststellen, dass ein anderes Namensauflösungssystem hinzugefügt wurde, das nicht betriebsbereit ist und uns die Langsamkeit beim Versuch der umgekehrten Auflösung verursacht.

Wenn die Reihenfolge der Namensauflösung nicht korrekt ist, können Sie sie ändern unter: /etc/nsswitch.conf

Entnommen aus: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html

1
1
1
2018-01-03 15:02:47 +0000

Dieser Thread bietet bereits einen Haufen von Lösungen, aber meine ist hier nicht angegeben =). Also hier ist es. Mein Problem (es dauerte etwa 1 Minute, um sich per ssh in meinen Raspberry Pi einzuloggen), lag an einer beschädigten .bash_history-Datei. Da die Datei bei der Anmeldung gelesen wird, war dies die Ursache für die Anmeldeverzögerung. Nachdem ich die Datei entfernt hatte, war die Anmeldezeit wieder normal, sozusagen augenblicklich.

Ich hoffe, dass dies einigen anderen Leuten hilft.

1
1
1
2016-12-06 09:24:08 +0000

Um alle Antworten zu vervollständigen, die zeigen, dass DNS-Auflösungen Ihren ssh-Login verlangsamen können, fehlt manchmal eine Firewall-Regel. Wenn Sie zum Beispiel alle INPUT-Paquets standardmäßig DROPEN

iptables -t filter -P INPUT DROP

, dann müssen Sie INPUT für den ssh-Port und die DNS-Anfrage

iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
``` akzeptieren.
1
1
1
2016-10-24 21:49:02 +0000

Ich habe kürzlich eine weitere Ursache für langsame ssh-Anmeldungen gefunden.

Auch wenn Sie UseDNS no in /etc/sshd_config haben, kann sshd immer noch Reverse-DNS-Lookups durchführen, wenn /etc/hosts.deny einen Eintrag wie:

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

Das könnte passieren, wenn Sie DenyHosts in Ihrem System installiert haben.

Es wäre toll, wenn jemand wüsste, wie man DenyHosts dazu bringt, diese Art von Eintrag in /etc/hosts.deny zu vermeiden.

Hier ist ein Link zu den DenyHosts FAQ , wie man Einträge aus /etc/hosts.deny entfernt - siehe Wie kann ich eine IP-Adresse entfernen, die DenyHosts blockiert hat?

1
1
1
2016-07-13 22:35:37 +0000

Ich habe festgestellt, dass der Neustart von systemd-logind.service das Problem nur für ein paar Stunden behoben hat. Das Ändern von UsePAM von yes auf no in sshd_config hat zu schnellen Anmeldungen geführt, obwohl motd nicht mehr angezeigt wird. Kommentare zu Sicherheitsproblemen?

0
0
0
2015-05-21 13:01:07 +0000

Bei mir gab es ein Problem in meiner lokalen /etc/hosts-Datei. Also versuchte ssh zwei verschiedene IPs (eine davon falsch), was ewig dauerte, bis die Zeit abgelaufen war.

Die Verwendung von ssh -v hat hier Abhilfe geschaffen:

$ ssh -vvv remotesrv
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /home/mathieu/.ssh/config
debug1: /home/mathieu/.ssh/config line 60: Applying options for remotesrv
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotesrv [192.168.0.10] port 22.
debug1: connect to address 192.168.0.10 port 22: Connection timed out
debug1: Connecting to remotesrv [192.168.0.26] port 22.
debug1: Connection established.
0
0
0
2014-08-28 11:41:40 +0000

Für mich brauchte ich GSSAPI, und ich wollte die Reverse-DNS-Lookups nicht abschalten. Das schien einfach keine gute Idee zu sein, also habe ich mir die Hauptseite für resolv.conf angesehen. Es stellte sich heraus, dass eine Firewall zwischen mir und den Servern, auf die ich per SSH zugriff, die DNS-Anfragen behinderte, weil sie nicht in einer Form vorlagen, die die Firewall erwartete. Letztendlich musste ich nur diese Zeile zur resolv.conf auf den Servern hinzufügen, mit denen ich per SSH verbunden war:

options single-request-reopen

0
0
0
2016-12-13 17:07:11 +0000

Bemerkenswerterweise hat ein Paket-Update von bind auf CentOS 7 named kaputt gemacht, das nun im Protokoll angibt, dass /etc/named.conf ein Berechtigungsproblem hat. Es hatte monatelang gut mit 0640 funktioniert. Jetzt will es 0644. Das macht Sinn, da der named-Daemon dem ‘named’-Benutzer gehört.

Ohne named war alles langsam, von ssh-Anmeldungen bis hin zum Ausliefern von Seiten vom lokalen Webserver, träge LAMP-Anwendungen usw., höchstwahrscheinlich, weil jede Anfrage auf dem toten lokalen Server eine Zeitüberschreitung verursachte, bevor auf einen externen, sekundären DNS, der konfiguriert ist, zugegriffen wurde.