Versuch, SSH-Authentifizierung mit Schlüsseldateien durchzuführen: Der Server hat unseren Schlüssel abgelehnt

53

Ich versuche, die SSH-Authentifizierung mit Schlüsseldateien anstelle von Benutzername / Passwort einzurichten. Der Client ist eine Windows-Box, auf der PuTTY ausgeführt wird, und der Server ist ein Ubuntu 12.04 LTS-Server.

Ich lud puttygen.exe herunter und ließ es ein Schlüsselpaar erzeugen. In /etc/ssh/sshd_configich habe diese Zeile:

AuthorizedKeysFile %h/.ssh/authorized_keys

In der öffentlichen Schlüsseldatei meines Kunden heißt es:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "[email protected]"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
[email protected]
---- END SSH2 PUBLIC KEY ----

Ich habe den Teil von "ssh-rsa AAA" nach "[email protected]" kopiert und in die Datei ~/.ssh/authorized_keysauf meinem Server (in meinem eigenen Ordner) geschrieben. In PuTTY habe ich unter Connection> SSH> Auth den Pfad zu dem privaten Schlüssel eingegeben, den es auf meinem Client generiert hat, und die Sitzungseinstellungen gespeichert.

Ich habe den ssh-Server mit neu gestartet

sudo service ssh restart

Wenn ich nun das Profil in PuTTY lade (ich habe überprüft, dass der private Schlüssel noch in Connection> SSH> Auth ist und der Pfad korrekt ist) und das Profil ausführe, heißt es

Server refused our key

Ich habe versucht, den öffentlichen Schlüssel in einer Datei unter dem Verzeichnis ./ssh/authorized_keys/ abzulegen, aber das hat nicht geholfen, also habe ich ihn ./ssh/authorized_keysals Datei verwendet und den Schlüssel darin eingefügt. Ich habe auch versucht, ein privates / öffentliches Schlüsselpaar auf dem Server zu generieren, den öffentlichen Schlüssel ./ssh/authorized_fileseinzugeben und den privaten Schlüssel in PuTTY auf meinen Client zu laden. Ein Neustart des Servers hat auch nicht geholfen.

Ich habe festgestellt, dass der Fehler möglicherweise behoben werden kann, indem der Schlüssel außerhalb des Basisordners des Benutzers abgelegt wird. Dies ist jedoch nur sinnvoll, wenn der Basisordner verschlüsselt ist, was bei diesem nicht der Fall ist.

Ich habe auch versucht, einen 4096-Bit-Schlüssel zu generieren, da ich dachte, 1024 wäre zu kurz.

Wie kann ich das zum Laufen bringen? Vielen Dank!

BEARBEITEN:

Ok, /var/log/auth.logsagte:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google sagt mir, ich ~/.ssh/solle 700 und ~/.ssh/authorized_keys600 sein, also habe ich das gemacht. Jetzt /var/log/auth.logsagt:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]
Gabelbart
quelle

Antworten:

95

Ok, es ist behoben, aber ich sehe nicht, wie sich das von dem unterscheidet, was ich bereits versucht habe.

Was ich getan habe:

  • generiere ein Schlüsselpaar mit puttygen.exe (Länge: 1024 Bit)
  • Laden Sie den privaten Schlüssel in das PuTTY-Profil
  • Geben Sie den öffentlichen Schlüssel in ~/.ssh/authorized_keys einer Zeile ein (muss beginnen mit ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • ändern, /etc/ssh/sshd_configso dass es enthältAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

Zur Fehlerbehebung tun # tail -f /var/log/auth.log.

Danke für Ihre Hilfe!

Gabelbart
quelle
1
Hmm, was ist mit diesem sshd: error: key_read: uudecode AAAAB3NFehler passiert auth.log?
Alaa Ali
Ich habe keine Ahnung, Alaa. Möglicherweise habe ich beim Einfügen der vorherigen Schlüsselzeichenfolge einen Fehler gemacht. Auth.log bekommt jetzt keine Einträge mehr und die schlüsselbasierte Authentifizierung funktioniert einwandfrei. Mein Hauptproblem war, dass ich mir nicht wirklich sicher war, was getan werden musste, was das Ganze sehr viel schwieriger machte. Ich weiß nicht warum, aber es funktioniert.
Nochmals vielen
Genial!!! Ich habe mir 2 Tage lang den Kopf gekratzt. Diese Antwort rettet den Tag !!
Naka
Schritt 3 war der Trick für mich. Ich habe den öffentlichen Schlüssel nicht in die authorized_keysDatei eingefügt , sondern nur meine mykey.pubDatei in den ~/.sshOrdner eingefügt. Ich dachte, er würde ihn abholen. Stattdessen musste ich dies letztendlich ausführen oder bearbeiten und unter anderen Schlüsseln einfügen, die sich möglicherweise dort befinden. cat mykey.pub >> authorized_keys. Scheint jetzt einfach, aber die gewonnene Lektion ist, dass alle öffentlichen Schlüssel authorized_keysnicht nur im ~/.ssh/Verzeichnis gespeichert werden müssen . Jemand bitte beraten, wenn dies keine korrekte Behauptung ist.
Timbrown
Wenn die Schritte nicht helfen, überprüfen Sie auch: 1. Sie haben den gespeicherten öffentlichen PuTTY-Schlüssel in authorized_keys kopiert, nicht in den OpenSSH-Schlüssel öffentlicher Schlüssel in mehreren Zeilen; es sollte eine einzelne Zeile sein; stellen Sie sicher , nicht hinzu führende oder nachfolgende Leerzeichen , während dank Kopieren auf r_hartman centos.org/forums/viewtopic.php?t=990
mvladk
23

Ich bin gerade auf dieses Problem gestoßen. Obwohl die Konfiguration korrekt eingestellt ist, wie in diesem Thread bereits erwähnt (Berechtigungen für authorized_keys usw.), stellte sich heraus, dass ich den öffentlichen Schlüssel im falschen Format hatte. Es war in Form von:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

Welches hat nicht funktioniert. Aber es hat funktioniert, es in der Form zu haben:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME
kuraara
quelle
14
Mit können Sie ssh-keygen -i -f filenameofwindowsformpub.keyden öffentlichen Schlüssel in das Format umwandeln, das von Ihrem OpenSSH-Server verstanden wird.
Schwarz
Ja, es hat bei mir funktioniert! Es muss in einer einzigen Zeile stehen. Kann nicht glauben, dass es nur das war!
Adelriosantiago
1
HI kuraara Ich bin der Meinung, dass die obige Anweisung von @Black in der Antwort hervorgehoben werden sollte.
ekerner
Kann ich dem OpenSSH-Serverformat einen Kommentar hinzufügen? Für den Menschen ist es schwer zu sagen, für welchen Computer dieser Schlüssel steht.
user1700890
Wenn ich dem Vorschlag von @Black folge, befindet sich am Ende der Zeichenfolge kein Benutzername @ HOSTNAME. Ich weiß nicht, ob dieser Teil wichtig ist.
Arnoldbird
9

Das Problem ist, dass Windows eine andere neue Zeile als Linux verwendet. Wenn Sie also den Schlüssel von Windows nach Linux kopieren, befindet sich am Ende der Zeile ein \ n , das Sie unter Linux im Editor nicht sehen können.

Wenn Sie die Datei /var/log/auth.log beenden und versuchen, sich anzumelden, ist der Fehler wie folgt:

sshd: error: key_read: uudecode AAAAB3N [....] == \ n

Wenn Sie Ihren Schlüssel unter Windows so ändern, dass er in einer einzigen Zeile ohne eine neue Zeile am Ende steht, und ihn dann nach Linux kopieren, sollte er funktionieren (hat den Trick für mich getan).

Mischa
quelle
Das war mein Problem, aber ich habe nichts in auth.log gesehen, was darauf hindeutet, dass dies der Fall ist. frustrierend ...
Anthony
8

Ich musste die Berechtigungen für das Basisverzeichnis ändern

chmod 700 ~
Michal Zmuda
quelle
2
Dies hat auch bei mir funktioniert (allerdings unter AIX).
Stevepastelan
Arbeitete auch für mich auf CentOS
Jaywalker
Hat für mich an Redhat gearbeitet! Gruppenschreibzugriff scheint das spezifische Problem zu sein. Funktioniert immer noch für mich, wenn ich die Gruppenleseberechtigungen unverändert lasse: "chmod 740 ~".
Paul
6

Ich musste die ~ / .ssh-Verzeichnisberechtigungen von 770 auf 700 und die ~ / .ssh / authorized_keys-Dateiberechtigungen von 660 auf 600 ändern.

Aus irgendeinem Grund hat das Entfernen von Gruppenberechtigungen dieses Problem für mich behoben.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
verdoppeln
quelle
5

Für die ~/.ssh/authorized_keysDatei müssen sich alle Schlüssel in einer Zeile befinden. Wenn Sie es wie in der obigen Paste über mehrere Zeilen hinzugefügt haben, versuchen Sie, die Zeilen zu verbinden.

Paul
quelle
Danke, das macht Sinn und jetzt verstehe ich, warum es eine Datei ist, kein Verzeichnis. Es hat jedoch nicht geholfen.
Forkbeard
3
Für jeden, der dadurch verwirrt sein könnte, bedeutet dies, dass sich jeder Schlüssel in einer einzigen Zeile befinden muss, aber unterschiedliche Schlüssel müssen sich in unterschiedlichen Zeilen befinden.
Anthony
2

Folgendes hat bei mir funktioniert:

In puttygen, nachdem Sie Ihre Schlüssel generiert haben, stellen Sie sicher , dass Sie kopieren und die Informationen aus dem oberen Feld in der authorized_keys - Datei gehen einfügen. Wenn Sie Ihren öffentlichen Schlüssel auf Ihrem Client-Computer speichern und ihn dann öffnen, unterscheidet sich der Text vom Text oben auf dem puttygenBildschirm. Stellen Sie erneut sicher, dass Sie den Text oben auf dem puttygenBildschirm (nachdem Sie Ihre Schlüssel erstellt haben) kopieren und in die Datei authorized_keys einfügen, die sich in befinden sollte ~/.ssh.

Zach
quelle
das Problem wurde dadurch behoben. Ich verstehe nicht warum, wenn Sie auf den öffentlichen Schlüssel speichern klicken, warum er nicht das richtige Format speichert.
Luky
1

Stellen Sie zusätzlich zu den oben genannten Antworten sicher, dass Sie den Schlüssel von puttygenrichtig kopieren und einfügen !

Wenn Sie einfach auf den Hauptteil der Schlüsselzeichenfolge doppelklicken, um sie auszuwählen, wird möglicherweise nicht die gesamte Zeichenfolge angezeigt, da das Textfeld Zeilen in einige Zeichen aufteilt +, z. B. , sodass Sie den Text nach dem +Zeichen nicht auswählen ( was Sie nicht sehen können, weil das Textfeld zu klein ist). Stellen Sie sicher, dass Sie die gesamte Zeichenfolge manuell ssh-rsabis zum Ende des Textfelds auswählen .

Mark Lakata
quelle
1

Manchmal kann es ein Problem sein, wenn der öffentliche Schlüssel in einer Zeile steht. Dieser Ansatz scheint es zu lösen

echo 'the content of the public key' > /root/.ssh/authorized_keys
dav
quelle
1

Für mich war das Problem, dass ich ~/.ssh/authorized_keysmit root erstellt hatte , also mit root. Ich musste chown sshuser:sshuser ~/.ssh/authorized_keysdann anfangen zu arbeiten

PeanutPower
quelle
1

Auch ich war mit diesem Fehler konfrontiert und habe ihn behoben, indem ich die Berechtigungen der Datei authorized_keys in geändert habe 600.

chmod 600 ~/.ssh/authorized_keys
Kaleem
quelle
1

Häufiger Fehler ist, dass Benutzer einen Texteditor (wie Vim) verwenden und den kopierten Text einfügen, bevor sie "Einfügen" aktivieren (vor dem Einfügen in Vim + i drücken).

Hakabe
quelle
0

Tatsächlich habe ich die authorized_keysErlaubnis geändert 644, um dann das Problem zu lösen.

chmod 644 ~/.ssh/authorized_keys
Peter Liang
quelle
0

um open ssh zu debuggen kann man folgendes benutzen:

sudo `which sshd` -p 2020 -Dd

Es wird sshd auf einem anderen Port 2020 ausgeführt. Es wird sshd als aktuelles Programm ausgeführt, sodass die Ausgabe an den Bildschirm geht. Wenn es geschlossen ist, ist es geschlossen.

Versuchen Sie dann, eine Verbindung herzustellen.

Erläuterung:

  • `which sshd` - Findet die SSHD-Adresse, versuche auszuführen, welche SSHD sehen soll, was sie ausgibt. Bei Verwendung von Anführungszeichen wird das Ergebnis ausgeführt und an der richtigen Stelle zurückgegeben.
  • -p 2020 - Gibt den Port an
  • -D - In Datei protokollieren
  • -d - Auf dem Bildschirm anmelden

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm

Shimon Doodkin
quelle
Könnten Sie diese Antwort erweitern? Was sind die Argumente? Was macht der Befehl (für jemanden, der keine Erfahrung hat)?
Zzzach ...
-1

Ich habe die Dateien ".ssh" und "authorized_keys" erstellt, während ich als root angemeldet war, und dabei die falschen Berechtigungen erteilt. Außerdem wurden alle Dateien im Stammverzeichnis abgelegt.

Das Ändern der Inhaberschaft dieser Dateien an den von Ihnen gewünschten Benutzer ist keine gute Übung. Daher habe ich meine Schritte zurückverfolgt und mich vergewissert, dass ich als der Benutzer angemeldet war, mit dem ich SSH verwenden wollte, und .ssh und authorized_keys erneut erstellt habe.

Anweisungen zum Verbinden von Win7 mit dem Xubuntu 15.04-Server: So erstellen Sie SSH-Schlüssel mit Putty zum Verbinden mit einem VPS

Leo Fisher
quelle