ssh hängt ohne Passwortabfrage - funktioniert in root oder anderen Konten

14

Ich hatte SSH-Schlüssel-basierte Login funktioniert gut. Dann habe ich den Hostnamen auf meinem Computer geändert und die schlüsselbasierte Anmeldung funktioniert nicht mehr. Schien sinnvoll zu sein. Die Schlüssel stützten sich wahrscheinlich auf meinen alten Hostnamen. Also habe ich alle meine Schlüssel und alle Dateien in ~ / .ssh / gelöscht und neu generiert (und die authorized_keys auf den Servern geändert, mit denen ich verbunden bin)

Jedes Mal, wenn ich versuche, ssh zu verwenden, hängt es sich ohne Kennworteingabeaufforderung auf, unabhängig davon, wo ich versuche, ssh zu verwenden - auch auf Servern, auf denen keine schlüsselbasierte Anmeldung eingerichtet ist. In .ssh / config ist nichts.

Darüber hinaus funktioniert ssh perfekt, wenn ich mich als Root anmelde. überhaupt keine Probleme. Dies geschieht nur in meinem Benutzerkonto.

Unten finden Sie einige Debugging-Informationen von ssh

ssh -vv [email protected]
OpenSSH_5.2p1, OpenSSL 0.9.8k 25. März 2009
debug1: Konfigurationsdaten werden gelesen /Users/myname/.ssh/config
debug1: Konfigurationsdaten lesen / usr / etc / ssh_config
......
debug1: Host 'myremoteserver.com' ist bekannt und stimmt mit dem RSA-Hostschlüssel überein.
debug1: Gefundener Schlüssel in /Users/myname/.ssh/known_hosts:1
debug2: Bits gesetzt: 512/1024
debug1: ssh_rsa_verify: Signatur korrekt
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS gesendet
debug1: erwartet SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS empfangen
debug1: SSH2_MSG_SERVICE_REQUEST gesendet
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT empfangen

Und dann hängt es einfach hier .....

Hier ist die Ausgabe von dtruss (wie strace, aber für OSX) am Ende, wo sie hängt: sudo dtruss ssh -vv [email protected]

select (0x4, 0x508200, 0x0, 0x0, 0x0) = 1 0
read (0x3, $ \ 222 \ 351 {L \ 363 \ 261 \ 25063sN \ 216 \ 300 @ q7 \ 203 \ 276b \ 257 \ 354 \ 337 \ 356 \ 260! {\ 342 \ 017 \ 271 = \ 222, \ 245 \ 347t \ 006 \ 225 \ 257 \ 333; \ 204 \ 020] \ 242 \ 005z # \ 0 ", 0x2000) = 48 0
write (0x2, "debug2: service_accept: ssh-userauth \ r \ n \ 0", 0x26) = 38 0
connect (0x4, 0xBFFFEEA2, 0x6A) = 0 0
Schreiben (0x4, "\ 0", 0x4) = 4 0
write (0x4, "\ v5 \ 004 \ 0", 0x1) = 1 0
read (0x4, "\ 0", 0x4) = -1 Err # 4

Es scheint, als würde es versuchen, etwas zu lesen, und es hängt einfach daran. Wenn jemand Vorschläge oder Ideen hat, wäre ich sehr dankbar!

Spareraver
quelle
Ich habe das gleiche Problem mit Snow Leopard (10.6.8 mit den neuesten Patches von Apple). Dies passiert nur, wenn versucht wird, eine Verbindung zu Servern über ein VPN herzustellen. Ein Neustart behebt das Problem vorübergehend, kommt jedoch zwangsläufig wieder. Server DNS Lookup ist nicht das Problem (das getestet). Dies hat etwas mit dem Status von SSH auf dem Client zu tun. Das Beenden von ssh-agent oder der Wechsel zu root löst das Problem nicht.
Daniel

Antworten:

9

Der Grund, warum Ihr ssh-Client für Ihr Konto hängt, aber nicht für andere Konten (root), ist wahrscheinlich, dass mit Ihrem ssh-agent etwas nicht stimmt. Entweder ssh-agentläuft das nicht oder die Konfiguration ist in irgendeiner Weise falsch.

Um dies zu bestätigen, können Sie Folgendes versuchen:

unset SSH_AUTH_SOCK
ssh [email protected]

Wenn Sie dann aufgefordert werden, die Passphrase in Ihren ssh_key einzugeben, liegt ein Problem mit Ihrem ssh-agent vor.

Siehe auch meinen Beitrag zu dieser verwandten Frage .

Tonin
quelle
Das hat den Job für mich gemacht! Ich muss es jedoch jedes Mal tun, wenn ich meinen Computer neu gestartet habe. Kennen Sie eine Möglichkeit, dies dauerhaft zu beheben?
Johan Dettmar
@ JohanDettmar Überprüfen Sie meine verlinkten Post und die darin enthaltenen Ratschläge. Wenn es Ihnen nicht weiterhilft, ist es wahrscheinlich am besten, eine neue Frage zu stellen, die Ihr Problem ausführlicher beschreibt.
Tonin
7

Kann ich Sie für Reverse DNS interessieren?

Im Wesentlichen führt der Client das umgekehrte DNS auf dem Server aus oder umgekehrt.

Ich schlage einen Test vor:

Deaktivieren Sie die DNS-Suche auf dem Server, indem Sie / etc / ssh / sshd_config bearbeiten und sicherstellen, dass "UseDNS" auf "no" gesetzt ist.

Führen Sie "service ssh reload" aus (oder was auch immer dazu führt, dass Ihr ssh-Daemon die Konfiguration erneut liest), und versuchen Sie es dann erneut.

Übrigens ist es nicht glücklich, Sie nach einer langen Zeit endlich dazu aufzufordern, oder?

Sie können auch den Inhalt von / etc / hosts auf dem Server überprüfen, um sicherzustellen, dass dort nichts falsch ist.

Matt Simmons
quelle
1

Überprüfen Sie die Berechtigungen für das Verzeichnis ~ / .ssh und die darin enthaltenen Dateien. Ihre Standard-umask ist möglicherweise zu freizügig und wenn Sie die Dateien neu erstellt haben, haben Sie ihnen möglicherweise versehentlich die falschen Berechtigungen erteilt. Ich bin selbst ein paar Mal davon verbrannt worden. Keiner der von mir verwendeten ssh-Clients (oder -Server) hat jemals eine nützliche Fehlermeldung dazu ausgegeben ...

KevinRae
quelle
Danke für den Tipp. Sieht aus, als wären meine Dauerwellen gleich. Ich kann ssh fine mit meinem Root-Account verwenden und habe überprüft, dass die Perms mit denen identisch sind. Merkwürdige Sache ist, es hängt nur und sagt nichts. Danke für den Versuch!
Spareraver
1

Sie haben freien Speicherplatz auf Ihrem Client (und auf Ihrem Server)?

df -h

Omry
quelle
Vielen Dank. Ja. viel Platz. mehr als 100 Konzerte frei. Danke für den Tipp tho.
Spareraver
1

Ich hatte ein ähnliches Problem.

ssh domain.ip:user.name

Es scheint, dass ich das Problem umgehen könnte, indem ich einen Login-Namen wie diesen erzwinge.

ssh -v domain.ip -l user.name
Drone Brain Inc
quelle
1

Für mich löste ein Upgrade auf Snow Leopard das Problem. Ich denke, das hing mit einem Fehler in OSX zusammen.

Spareraver
quelle
0

Wenn es sich um einen gespeicherten Schlüssel handelt, sollten Sie ihn aus Ihrem ~ / .ssh-Verzeichnis in der Datei known_hosts löschen können. Suchen Sie einfach den Eintrag und löschen Sie ihn. Dann sollten Sie erneut dazu aufgefordert werden.

Auf der anderen Seite sollte es eine Warnung geben, wenn der Host nicht mit den aufgezeichneten Daten übereinstimmt.

Ich hatte Probleme, bei denen die Suche nach Hostnamen unter OS X fehlschlägt. Das Warten auf eine Verbindung hat ein Zeitlimit überschritten, oder wenn die Eingabeaufforderung angezeigt wird, dauert es etwa zehn Sekunden, bis Sie ein Kennwort eingeben, bevor die Verbindung getrennt wird. Ich konnte es nie nachverfolgen, obwohl Leute vorschlugen, den fraglichen Host zur Host-Datei hinzuzufügen. Ich denke, es war nur eine "Panne mit den DNS-Lookups von OS X" und es wurde erwartet, dass es toleriert wird. Wenn jemand anderes dieses Problem hätte und es lösen würde, würde ich gerne davon erfahren.

Bart Silverstrim
quelle
Danke Bart! Also habe ich im Wesentlichen alles in .ssh gelöscht (weise oder unklug) und jetzt ist nichts da. Es scheint immer noch einzufrieren und weiter zu hängen. Da ich known_hosts auch weggeblasen habe, fragt es zuerst, ob ich fortfahren möchte, setzt den Schlüssel in die known_hosts Akte und hängt am gleichen Platz wie vorher. Ich werde meine Antwort schnell aktualisieren, um diesen Punkt zu klären. Ich schätze deine Hilfe sehr.
Spareraver
1
Es klingt wirklich wie die Panne, auf die ich auf einem MacBook gestoßen bin. Es schien in irgendeiner Weise mit DNS-Suchvorgängen zu tun zu haben. Schließlich gab ich es auf und lebte nur mit einer langen Pause, bevor ich eine Verbindung herstellte, und hoffte, dass es später behoben werden würde.
Bart Silverstrim
0

Überprüfen Sie die Protokolle auf dem Server. Es ist normalerweise in /var/log/auth.log(Debian / Ubuntu) oder /var/log/secure(RedHat / CentOS). Verbindungsprobleme werden in der Regel dort protokolliert.

Rory
quelle
0

Stellen Sie sicher, dass / etc / hostname mit einem Zeilenumbruch versehen ist.

Massimo Fazzolari
quelle