Wie rufe ich den öffentlichen Schlüssel von einem privaten SSH-Schlüssel ab?


444

Ein privater SSH-Schlüssel, wie er von generiert wird, ssh-keygenenthält einen öffentlichen Schlüsselteil. Wie rufe ich diesen öffentlichen Schlüssel vom privaten Schlüssel ab? Ich habe meinen öffentlichen Schlüssel verloren und muss den Inhalt dieses öffentlichen Schlüssels in die Serverdatei authorized_keyseinfügen und möchte kein neues Schlüsselpaar erstellen.

Alternativ formuliert: Wie erstelle ich die id_rsa.pubDatei aus einer id_rsaDatei?


pbcopy > ~/.ssh/id_rsa.pubHoppla.
Nick T

@NickT - pbcopy ist ein MacOSX-Befehl. Außerdem ist es nutzlos, wenn Sie neu gestartet, abgemeldet oder etwas anderes in die Zwischenablage kopiert haben.
Jsnfwlr

Antworten:


681

Ich habe die Antwort auf Serverfehler gefunden: Einen öffentlichen SSH-Schlüssel aus dem privaten Schlüssel erstellen?

Die Option -ygibt den öffentlichen Schlüssel aus:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Als Randnotiz geht der Kommentar des öffentlichen Schlüssels verloren. Ich hatte eine Site, für die der Kommentar erforderlich war (Launchpad?). ~/.ssh/id_rsa.pubDaher müssen Sie einen Kommentar bearbeiten und an die erste Zeile anhängen, wobei ein Leerzeichen zwischen dem Kommentar und den Schlüsseldaten eingefügt wird. Ein Beispiel für einen öffentlichen Schlüssel ist unten abgeschnitten dargestellt.

ssh-rsa AAAA..../VqDjtS5 ubuntu@ubuntu

Bei Schlüsseln, die dem SSH-Agenten hinzugefügt wurden (ein Programm, das im Hintergrund ausgeführt wird und das wiederholte Eingeben der Passphrase ssh-add -Lfür Schlüsseldateien überflüssig macht), können Sie mit dem Befehl die öffentlichen Schlüssel für Schlüssel auflisten , die hinzugefügt wurden der Agent (via ssh-add -l). Dies ist nützlich, wenn der SSH-Schlüssel auf einer Smartcard gespeichert ist (und kein Zugriff auf die private Schlüsseldatei möglich ist).


1
Bitte beachten Sie, dass Ihre private Schlüsseldatei ~/.ssh/id_rsaauf Ihren Benutzernamen beschränkt sein muss. Verwenden Sie $ sudo chmod 600 ~/.ssh/id_rsaIhre Stammanmeldeinformationen, und geben Sie sie ein, um sie einzuschränken. Anschließend können Sie die öffentliche Schlüsseldatei ausgeben. Andernfalls erhalten Sie eine uneingeschränkte Warnung zu privaten Schlüsseldateien.
Mark Mikofski

12
@MarkMikofski Keine Notwendigkeit sudo, Sie sollten den privaten Schlüssel bereits besitzen. Sonst können Sie es gar nicht erst lesen.
Lekensteyn,

7
@Lekensteyn danke, natürlich hast du recht !. Auch 400wird empfohlen, da nicht geschrieben werden muss, um private Schlüsseldateien einzugeben. Der korrigierte Befehl sollte$ chmod 400 ~/.ssh/id_rsa
Mark Mikofski

Der Kommentar zum privaten Schlüssel geht verloren. Siehe stackoverflow.com/questions/38290929/…
weberjn

1
@weberjn Der private Schlüssel ( id_rsaDatei) hat keinen Kommentar, aber der Kommentar in der öffentlichen Schlüsseldatei ( id_rsa.pub) geht verloren.
Lekensteyn

14

Dies ist eine Lösung speziell für Benutzer, die Windows verwenden, um SSH auf ihren Remotecomputern auszuführen, einschließlich Cloud-Images auf Amazon AWS und GCE.

(Haftungsausschluss)

Ich habe diese Lösung kürzlich verwendet, um mich per Fernzugriff bei neuen bereitgestellten VM-Images auf GCE anzumelden.


Benutztes Werkzeug:

  1. Kitt
  2. WinSCP

Durchzuführende Schritte:

  1. Generieren Sie mit puttygen ein öffentliches / privates Schlüsselpaar.
  2. Laden Sie einen öffentlichen Schlüssel auf Ihren Server in der Cloud oder an einem Remotestandort hoch.

Beschreibung (wie es geht):

  1. Generieren Sie einen Schlüssel / ein Paar oder verwenden Sie einen vorhandenen privaten Schlüssel:

    Wenn Sie einen privaten Schlüssel haben:

    Öffnen Sie puttygen, drücken Sie die Ladetaste und wählen Sie Ihre private Schlüsseldatei (* .pem) aus.

    Wenn Sie nicht einen privaten Schlüssel:

    • Offener Kitt,
    • Wählen Sie den gewünschten Schlüsseltyp SSH2-DSA (Sie können RSA oder DSA verwenden) im Abschnitt Parameter aus ... und lassen Sie das Feld für die Passphrase unbedingt leer.
    • Drücken Sie auf "Erzeugen" und befolgen Sie die Anweisungen, um ein (öffentliches / privates) Schlüsselpaar zu erzeugen.

    Beispiel Key Generation Bild

  2. Erstellen Sie eine neue 'authorized_keys'-Datei (mit Notepad):

    Kopieren Sie Ihre öffentlichen Schlüsseldaten aus dem Abschnitt "Öffentlicher Schlüssel zum Einfügen in die OpenSSH-Datei" authorized_keys "des PuTTY-Schlüsselgenerators und fügen Sie die Schlüsseldaten in die Datei" authorized_keys "ein.

    Stellen Sie sicher, dass diese Datei nur eine Textzeile enthält.

  3. Laden Sie den Schlüssel auf einen Linux-Server hoch:

    • Öffnen Sie WinSCP,
    • Wählen Sie das SFTP-Dateiprotokoll aus und melden Sie sich mit Ihren SSH-Anmeldeinformationen an.
    • Bei Erfolg wird die Basisverzeichnisstruktur auf Ihrem Remotecomputer angezeigt.

    Laden Sie die Datei "authorized_keys" in das Ausgangsverzeichnis des Remote-Computers hoch.

  4. Richtige Berechtigungen festlegen:

    Erstelle ein .sshVerzeichnis (falls es nicht existiert)

    Kopieren Sie die authorized_keysDatei in das Verzeichnis .ssh (dies ersetzt alle vorhandenen authorized_keysDateien; beachten Sie dies).

    Wenn die Datei vorhanden ist, fügen Sie einfach den Inhalt dieser Datei zur vorhandenen Datei hinzu.

    Führen Sie Befehle aus, um Berechtigungen festzulegen:

    sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
    

Jetzt können Sie jederzeit ohne Eingabe von Anmeldeinformationen in einen Remote-Computer sshen.

Weitere Lektüre:

  1. Generieren und Hochladen von SSH-Schlüsseln unter Windows

  2. Authentifizierung ohne Passwort mit OpenSSH-Schlüssel, Zertifikaten .pem und .pub


Wenn Ihr Home-Verzeichnis verschlüsselt ist, gehen Sie folgendermaßen vor: askubuntu.com/questions/439184/…
devprashant

2
Obwohl Ihre Antwort für die Frage nicht wirklich relevant ist, stimme ich aufgrund Ihrer Begeisterung dafür.
Truong Nguyen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.