Wie kann ich mein zu langsames SSH-Login beschleunigen?

42

Das Laufen ssh user@hostnamedauert ca. 30s. Hier ist das Szenario:

  • Dies ist eine VM im lokalen LAN
  • Windows- und Mac-Computer werden sofort angemeldet
  • Ich benutze Debian und könnte es mit einer Ubuntu-Maschine reproduzieren
  • Jemand, der Ubuntu verwendet, sagt, dass die Anmeldung bei meinem Computer (lokales LAN) ebenfalls sofort erfolgt
  • Die Verwendung der IP-Adresse des Hostnamens dauert ungefähr halb so lange (~ 15s).

[ Update ]

Unter Verwendung ssh -vvv user@hostname, hier, wo es am meisten wartet:

debug3: authmethod_lookup gssapi-with-mic
debug3: remaining preferred: publickey,keyboard-interactive,password
debug3: authmethod_is_enabled gssapi-with-mic
debug1: Next authentication method: gssapi-with-mic

Und dann wartet es hier ein bisschen:

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
Tshepang
quelle
1
Verwenden Sie Passwort- oder Pubkey-Authentifizierung? und wenn passwort, ist das a id_dsaoder die id_rsadatei in deinem ~/.ssh? Vielleicht versucht Ihre SSH-Installation zuerst die falsche Authentifizierung und Ihr Server verweigert dies nicht. Ignorieren Sie einfach diese Anfrage, was zu einem Timeout von 30 Sekunden führt
Tobias Kienzler,
@tobias Ich benutze ein Passwort und habe keine "~/.ssh"Datei. Das ist ein Verzeichnis, in dem sich nur "known_hosts"Dateien befinden.
Tshepang
5
Sie haben anscheinend ein DNS-Timeout von 15 Sekunden. Möglicherweise führt der Server eine DNS-Suche durch. wenn Sie können, stellen Sie sicher , haben Sie UseDNS noin sshd_configauf dem Server. Führen Sie ssh -vvv user@hostnamein jedem Fall aus, um festzustellen , wo die Anmeldung hängt.
Gilles 'SO - hör auf böse zu sein'
@ Gil Danke. Ich habe die Frage aktualisiert. Ich werde den Administrator bitten, nach dieser UseDNS- Einstellung zu suchen .
Tshepang
3
@ Tshepang: Oh, Sie verwenden die Kerberos-Authentifizierung (GSSAPI). Ich bin damit nicht vertraut. Wenn es falsch konfiguriert ist, verursacht es möglicherweise die Verzögerung. Dies können Sie Ihrem Administrator mitteilen. DNS könnte ein roter Hering sein; Es ist die häufigste Ursache in freier Wildbahn, aber vielleicht ist Ihr Problem anders.
Gilles 'SO - hör auf böse zu sein'

Antworten:

32

Bearbeiten Sie Ihre " / etc / ssh / ssh_config " und kommentieren Sie diese Zeilen aus:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
Alvaro Araos
quelle
3
+1 Schöne Antwort! (1) Ist es eine normale Geschwindigkeit für SSH-Anmeldeverbindungen, wenn der Cursor siebenmal blinkt? (2) Warum funktioniert das durch Auskommentieren von GSSAPIAuthentication yesund GSSAPIDelegateCredentials no? @ Tshepang
Tim
@Tim (1) das ist viel zu lang ... abhängig von der Verbindung erwarte ich nicht, dass es länger als 2 Sekunden dauert; (2) Ich habe keine Ahnung, nur, dass es funktioniert
Tshepang
1
Die Standardeinstellung für GSSAPIAuthentication in den meisten OpenSSH-Versionen ist "no", aber einige Distributionen setzen sie in den Dateien sshd_config und ssh_config auf "yes". Wenn Sie es nicht benötigen / verwenden, verlangsamt es den Verbindungs- / Authentifizierungs-Handshake.
Tgharold
Wenn die LDAP / AD-Authentifizierung verwendet wird, führt die Deaktivierung von GSSAPI nicht zur Verwendung einer einfachen Bindung, bei der möglicherweise Kennwörter im Klartext über das Netzwerk gesendet werden.
Shannon
Stellen Sie sicher, dass alle Nameserver in /etc/resolv.conf noch vorhanden sind. Wenn nicht, nehmen Sie sie raus. Dies löste mein Problem.
Technokrat
30

Ich hatte dieses Problem und löste es durch Deaktivieren der umgekehrten DNS-Auflösung in SSH.

Also sshd_configauf dem Server ändern:

 #UseDNS yes

dazu:

UseDNS no
Earlz
quelle
1
Ich habe die Änderung vorgenommen (obwohl ich keine auskommentierte UseDNS- Option hatte), meinen ssh-Server zurückgesetzt und immer noch das gleiche Problem.
Tshepang
2
@Tshe hmm, ungerade. Die einzigen Geschwindigkeitsprobleme, die ich jemals mit SSH hatte, waren darauf zurückzuführen.
Earlz
1
Ich war skeptisch, als ich mich mit der IP-Adresse (Heim-LAN) anmeldete, aber diese Lösung hat mein Problem behoben. Aus Gründen von Google hatte die Verzögerung, obwohl sie unmittelbar danach auftrat, nichts mit der Meldung "key: /home/mylogin/.ssh/id_ecdsa ((nil))" zu tun (während der Ausführung ssh -vvv).
Skippy le Grand Gourou
7

Haben Sie Ihr DNS-Setup überprüft?

Probieren Sie die Einstellung mdns offin /etc/host.conf.

Dies deaktiviert die mdns-Auflösung und hat mir sehr geholfen.

BEARBEITEN:

Es sieht so aus, als würde Gentoo dies ein bisschen anders handhaben. Um die Multicast-DNS-Suche zu deaktivieren, müssen Sie die Datei ändern /etc/nsswitch.conf.
Es sollte etwas geben wie:

hosts:          files mdns

Ändern Sie es in:

hosts:          files dns
Christian
quelle
+1 gute Idee. @Tshepang stellt ssh eine schnellere Verbindung her, wenn Sie die IP des Hostnamens direkt verwenden?
Tobias Kienzler
@tobias braucht die Hälfte der Zeit
Tshepang
Ich bekomme /etc/host.conf: line 2: bad command mdns aus, wenn ich renne ssh user@hostname.
Tshepang
Dies scheint eine veraltete Einstellung zu sein, da glibc 2.3.x (2006): forums.gentoo.org/viewtopic-t-476558-highlight-mdns.html . Was benutzt du (OS, glic Version)?
Tshepang
1
Sie sagen, es dauert nur die Hälfte der Zeit, wenn Sie die IP-Adresse verwenden. Dies bedeutet, dass Sie ein Problem mit Ihrer Namensauflösung haben (IP => FQDN oder FQDN => IP). Schauen Sie sich also zuerst Ihre DNS-Konfiguration an und versuchen Sie dann herauszufinden, ob Sie ein Problem mit ssh haben oder nicht.
Christian
3

Das Hinzufügen des Hostnamens /etc/hostskann dieses Problem manchmal beheben.

Don Mclachlan
quelle
Funktioniert für einen einzelnen Hostnamen, aber die Lösung von Earlz ist allgemeiner (und behebt das gleiche Problem).
Skippy le Grand Gourou
1

Überprüfen Sie auch, ob nscdinstalliert ist und ausgeführt wird.

Das Fehlen eines DNS-Cache kann die Zeit für die Auflösung des PTR-Datensatzes verlängern (vorausgesetzt, der SSH-Client führt eine DNS-Reverse-Suche nach der IP-Adresse des Servers durch).

altmas5
quelle
0

Ich habe das gleiche Problem in der Windows 2008 R2-Umgebung, aber "useDNS no" funktioniert nicht.

Ich versuche, den Hosts die IP und den Host des Verbindungsservers hinzuzufügen, und es ist 30 Sekunden schneller. Das lässt mich denken, dass die Auflösung in DNS sein könnte.

Ich versuche, DNS-Bediener hinzuzufügen, aber dieses löst es nicht.

Mein Server hat zwei DNS-Suffixe. Eine für die Unternehmensdomäne, zu der der Server gehört (domain.com), und die andere für die externe Schnittstelle, die eine Verbindung zu einem privaten Netzwerk herstellt (domain.net).

Die Reihenfolge der DNS-Suffixe lautet zuerst domain.net und dann domain.com

Meine SFTP / SSH-Clients befinden sich in der Unternehmensdomäne. Übrigens sind problematische Kunden aus dem Unternehmensbereich.

Was bei mir funktioniert ist, dass ich zuerst domain.com und dann domain.net zum zweiten mache

Die 2m30s Verbindungsverzögerung vor wurde nur 3-4s.

Eric Arpon
quelle