SSH-Schlüssel, der mich nach einer Passphrase fragt?

35

Ich habe ein öffentliches / privates Schlüsselpaar. Keiner von beiden ist eine Art Passphrase zugeordnet.

Immer wenn ich versuche, mit dem privaten oder dem öffentlichen Schlüssel zu ssh (und ich bin mir ziemlich sicher, dass ich nur den öffentlichen Schlüssel verwenden sollte), werde ich nach einer Passphrase gefragt und kann dann natürlich keine Verbindung herstellen.

Hat jemand eine Idee, wie man das umgehen kann? Gebe ich einen Befehl falsch ein? Ich versuche, mit dem in ~ / .ec2 / key.ppk gespeicherten Schlüssel auf einen Server zu sshen, den ich in meiner ~ / .ssh / config-Datei eingerichtet habe (richtig, da genau diese Einrichtung auf einem anderen Server funktioniert)

Ich habe auch versucht, mit puttygen.exe einen neuen privaten Schlüssel mit einer Passphrase zu generieren, und diesen Schlüssel dann zu verwenden. Wenn ich die Passphrase eingebe, schlägt dies immer noch fehl.

llaskin
quelle

Antworten:

28

Zunächst ist es der private Schlüssel, der die Passphrase enthält. Dies wird anhand des öffentlichen Schlüssels überprüft, der auf dem Remote-Server gespeichert ist.

ppkVermutlich versuchen Sie, mit openssh ein privates Schlüsselformat ( ) zu verwenden. Dies funktioniert nicht. PuTTYgen verfügt in diesem Fall über eine Exportoption für openssh.

ssh-rsa AAAAB3NzaC1y...... etc

Ich gehe auch davon aus, dass der Server, zu dem Sie sshen möchten, Ihren öffentlichen Schlüssel (im ~/.ssh/authorized_keysAllgemeinen) korrekt in der Datei mit dem autorisierten Schlüssel gespeichert hat .

Eine andere Vermutung wäre, dass nicht der richtige Schlüssel ausgewählt wurde. Einige Dinge, die ich versuchen würde, sind:

Zurücksetzen der Schlüssel-Passphrase mit ssh-keygen...

$ ssh-keygen -f ~/.ec2/key.ppk -p

Hiermit wird bestätigt, ob Ihr Schlüssel tatsächlich bereits eine Passphrase enthält (oder nicht).

Zweitens würde ich versuchen, eine Verbindung über eine ausführliche Ausgabe herzustellen, indem ich explizit Ihren öffentlichen Schlüssel spezifiziere:

$ ssh host -i ~/.ec2/key.ppk -vvv

Auf diese Weise erhalten Sie einen genaueren Überblick über die Vorgänge.

mrverrall
quelle
Richtig, dies ist ein Schlüssel, der von puttygen aus einem Schlüssel generiert wird, der in putty funktioniert. Wenn ich auf denselben Server putte (von dem Computer, auf dem die Cygwin-Instanz gehostet wird), funktioniert es einwandfrei mit genau demselben Schlüssel. Wenn ich versuche, über ssh von Cygwin zu verbinden, bombardiert es heraus. Ich bin verwirrt, wie ich das hinbekomme.
llaskin
6
Ich denke, Mrverrall weist darauf hin, dass das Dateiformat für den privaten PuTTY-Schlüssel nicht mit dem für OpenSSH (dem ssh-Client in Cygwin) verwendeten Dateiformat übereinstimmt. Daher verwendet OpenSSH die privaten Schlüsseldaten nur deshalb nicht, weil es nicht herausfinden kann, was die Daten bedeuten. PuTTY bietet jedoch die Option "Exportieren", sodass Sie Daten im benötigten "PEM" -Format abrufen können.
Phil P
Dieser Fehler tritt auch auf, wenn die Datei im richtigen Format vorliegt. Überprüfen Sie also zweimal und dreimal, ob Sie sie richtig kopiert und eingefügt haben, wenn Sie sie manuell erstellen.
Daniel Sokolowski
Ist ssh-rsa AAAAB3NzaC1y...... etcdas Format von openssh richtig? Ich habe dieses Format in meinem privaten Schlüssel. In der Kopfzeile heißt es: PuTTY-User-Key-File-2: ssh-rsa Encryption: none Comment: imported-openssh-key Public-Lines: 6Die Datei wird jedoch als id_rsa-Datei gespeichert. Bedeutet das, dass dies immer noch im .ppk-Format ist, obwohl der Name der Datei nurid_rsa
alpha_989 15.01.18
Finden Sie hier die Antwort für die verschiedenen Formate. In meinem Fall war die Erweiterung der Datei, obwohl sie nicht vorhanden war .ppk, immer noch im Kittformat , was mich verwirrte, da sie alle möglichen Fehler aufwies, aber keinen direkten Hinweis darauf gab, dass das Problem mit dem Format des Schlüssels zu tun hatte : stackoverflow.com/a/44391850/4752883
alpha_989
18

Sie könnten ssh-agent ausführen. Sehen Sie hier für eine Diskussion.

Die Kurzversion, die für mich funktioniert hat (in Bash):

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rnRLi11880/agent.11880; export SSH_AUTH_SOCK;
SSH_AGENT_PID=11881; export SSH_AGENT_PID;
echo Agent pid 11881;

Ich nahm die 3 Linien, die es ausstößt, und führte sie aus. Eine andere Möglichkeit ist die Ausgabe von -s:

$ eval `ssh-agent -s`

Dann habe ich meine Zugangsdaten hinzugefügt:

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/me/.ssh/id_rsa: 
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

Jetzt gibt der Agent die Anmeldeinformationen ein, anstatt dass ich meine Passphrase eingeben muss.

Ich glaube, ssh-agent verschwindet, wenn die Shell es tut, daher sollte dies beim Start für maximale Bequemlichkeit geskriptet werden. Der Link, den ich geteilt habe, beschreibt auch die Skripterstellung.

dfrankow
quelle
4

Wenn Sie Ihren öffentlichen Schlüssel einrichten, haben Sie ihn wahrscheinlich (möglicherweise versehentlich) mit einer Passphrase eingerichtet.

Sie müssen wahrscheinlich neu starten - ich habe puttygen nicht verwendet, aber Sie können den öffentlichen Schlüssel in Ihrem .ssh-Verzeichnis löschen (oder umbenennen), ssh-keygeneinen neuen erstellen (wobei Sie sicher sein müssen, keine Passphrase anzugeben) und dann Geben Sie den öffentlichen Schlüssel für die Datei "authorized_keys" auf dem Server frei, zu dem Sie eine Verbindung herstellen möchten.

Möglicherweise müssen Sie auch Ihren alten Passphrasenschlüssel aus der Datei mit den autorisierten Schlüsseln auf dem Server entfernen, zu dem Sie eine Verbindung herstellen.

JohnMcG
quelle
4

Stellen Sie sicher, dass der private Schlüssel id_rsaam Ende keine zusätzlichen Zeilenumbrüche enthält. In einigen Fällen veranlasst ein zusätzlicher Zeilenumbruch ssh-keygen, nach der Passphrase zu fragen. Versuchen Sie Folgendes:

sed  '/^$/d' /path/to/key > id_rsa

Prüfung:

ssh-keygen -yf id_rsa
nbari
quelle
2
OMG das war mein Problem. Ein zusätzlicher Zeilenumbruch, nachdem der -----END RSA PRIVATE KEY-----nach der Passphrase für einen Schlüssel gefragt hat, für den noch kein Satz vorhanden war!
edk750
3

Eine Sache zu überprüfen, wenn Ihre sshd_config-Datei StrictModes = yes hat, dann darf das Verzeichnis $ HOME oder $ HOME / .ssh nicht für Gruppen oder andere von der Welt beschreibbar sein. Andernfalls schlägt die Authentifizierung fehl, egal was passiert.

TD1
quelle
1

Ich habe den Fehler gemacht, meine Datei ~ / .ssh / id_rsa versehentlich mit meiner Datei ~ / .ssh / id_rsa.pub zu überschreiben. Wenn Sie dies tun, werden Sie von ssh nach einer Passphrase gefragt.

Rotes Kricket
quelle
0

Ich bin neulich auf dieses Problem gestoßen. Insbesondere habe ich versucht, einen privaten AWS-Schlüssel von einem Computer auf einen anderen zu kopieren / einzufügen.

Ich habe die schlechte Angewohnheit, entweder das erste oder das letzte Zeichen zu verpassen. Es stellt sich heraus, dass Sie, wenn Sie nicht jeden Bindestrich am Ende Ihres privaten Schlüssels greifen - obwohl dies nichts mit dem Schlüsseltext selbst zu tun hat - zur Eingabe einer Passphrase für den privaten Schlüssel aufgefordert werden, bis Sie jedes Zeichen aus dem hinzufügen Schlüssel, von dem Sie kopiert haben (in meinem Fall bedeutete dies das Hinzufügen eines einzelnen Bindestrichs am Ende des Schlüssels.)

Ich nehme an, dies bedeutet, dass die beste Vorgehensweise darin besteht, die Textdatei über das Netzwerk zu versenden, anstatt zu versuchen, sie zwischen Terminalfenstern zu kopieren und einzufügen.

Professor Tom
quelle
0

Unter OSX konnte ich einfach ausführen:

$ ssh-add ~/.ssh/id_rsa Enter passphrase for /Users/me/.ssh/id_rsa: `Identity added: /Users/mikekilmer/.ssh/id_rsa (/Users/mikekilmer/.ssh/id_rsa)

Das Kennwort wurde von der Anwendung Keychain Access im Ordner Applications> Utilities gespeichert. Ich habe gerade id_in das Suchfeld eingegeben .

MikeiLL
quelle
0

Versuchen Sie, die Protokolldateien auf dem Server anzuzeigen. Siehe / var / log / auth log (z. B. / var / log / authlog für OpenSSH, obwohl ich gesehen habe, dass einige Betriebssysteme Portable OpenSSH und /var/log/auth.log verwenden) und überprüfen Sie das Ende dieser Datei.

Die häufigsten Ursachen, die ich gesehen habe, sind falsche Berechtigungen (wie in der Antwort von TD1 vermerkt ), obwohl andere Probleme damit zusammenhängen können, dass sich der öffentliche Schlüssel (auf dem Server gespeichert) nicht in der richtigen Datei befindet oder dieser Schlüssel auskommentiert ist, oder a falsch geschriebener Benutzername.

Es kann auch hilfreich sein (zur Fehlerbehebung), dem Konto vorübergehend eine Passphrase zuzuweisen, um zu überprüfen, ob das Konto in diesem Fall erfolgreich angemeldet werden kann.

Wenn das Anzeigen der Protokolldatei nicht schnell zu einer Lösung führt, empfehle ich das Posten einer neuen Frage (da dies eine sehr allgemeine Frage ist), die die spezifischen Details aus der Protokolldatei enthält, damit spezifischere Anweisungen bereitgestellt werden können.

TOOGAM
quelle
0

In meinem Team ist dies kein Problem vor Ort. Der SSH-Schlüssel und / oder der Zugriff des Benutzers wurde auf dem Server, mit dem die Verbindung hergestellt wird, nicht richtig konfiguriert (in unserem Fall eine Hosting-Plattform). Aus irgendeinem Grund wird eine Aufforderung zur Eingabe eines nicht vorhandenen SSH-Schlüssels ausgelöst.

ognockocaten
quelle