Wie kann ich einen passwortgeschützten SSH-Schlüssel dauerhaft speichern?

9

Ich benutze Awesome Window Manager

Wie kann ich dauerhaft private Schlüssel mit Passwort hinzufügen?

Inspiriert von der Antwort hier habe ich die privaten Schlüssel in ~ / .ssh / config hinzugefügt

Inhalt von ~ / .ssh / config:

IdentityFile 'private key full path'

Berechtigungen von ~ / .ssh / config: 0700

Aber bei mir funktioniert es nicht.

Wenn ich den Schlüssel in jeder Sitzung manuell hinzufüge, funktioniert dies, aber ich suche nach einer eleganteren Methode (nicht in .bashrc).

EDIT :

  • Verwenden der klassischen Gnome- Version (ohne Effekte).

Nach dem Hinzufügen des SSH-Schlüssels ssh-copy-ifzum Remote-Host wird beim Anmelden im Terminal (GNOME Terminal 3.0.1) die folgende Eingabeaufforderung angezeigt :

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • Verwenden von Awesome Window Manager v3.4.10. Ich hatte bereits gnome-keyring-dameonso, dass ich die andere PID getötet und gnome-keyring-daemon --start | grep SOCKdie (grep) Ausgabe ausgeführt habe (ich habe sie auch in .profile hinzugefügt):

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

Ich habe genau die gleichen Schritte ausgeführt und habe auch keinen GUI-Dialog zum Hinzufügen von SSH.

EDIT 2 :

Ich habe einen neuen kennwortgeschützten Schlüssel aus der virtuellen Ubuntu 11.10-Maschine auf Unity erstellt und kann immer noch keine Kennwortabfrage erhalten.

EDIT 3 : Es scheint, dass dies nicht in Awesome Window Manager funktionieren kann :( und möglicherweise andere ..

pl1nk
quelle
1
Was bringt es, einen passwortgeschützten SSH-Schlüssel hinzuzufügen? Es besiegt den Zweck ...
MarkovCh1
3
@Syzygy Nun, geben Sie immer die Passwörter von verschiedenen Diensten und Apps ein oder verwenden Sie einen Schlüsselring, um Ihr Passwort mit Ihrem Login-Passwort zu entsperren?
pl1nk
Noch mehr Gedanken / Fragen, bitte? Die Bounty-Nachfrist läuft WIRKLICH bald ab :-)
ish
@izx Ich habe alles überprüft, was Sie erwähnt haben und sind alle wie erwartet. Wie ich in meinem Update erwähnt habe, habe ich auch Gnome verwendet. Soll ich einen Fehler melden?
pl1nk
Sie könnten einige Hinweise finden hier . Es sieht so aus, als ob die Reihenfolge, in der die Dinge beginnen, wichtig ist, und für den Gnome-Keyring-Daemon ist es auch wichtig, zum dbus zu gelangen.
John S Gruber

Antworten:

2

Wenn Sie Unity oder einen Sitzungsmanager verwenden, der gnome-keyring-daemon startet, können Sie einfach Seahorse (Passwörter und Schlüssel) verwenden, um einen Schlüssel zu erstellen, zu definieren, wofür er bestimmt ist, eine Passphrase festzulegen und seinen öffentlichen Schlüssel an den zu verteilen Computer, den Sie mit ssh verwenden werden. Es sind keine Terminalbefehle erforderlich.

Sie erstellen das Passwort durch:

  1. Wählen Sie Datei-> Neu und wählen Sie Secure Shell Key. Drücken Sie Weiter.

  2. Geben Sie einen beschreibenden Namen ein und wählen Sie Create and set up.

  3. Sie werden aufgefordert, zweimal eine Schlüsselphrase einzugeben (das zweite Mal, um zu überprüfen, ob Sie sie beim ersten Mal nicht falsch eingegeben haben.

  4. Geben Sie den Computer ein, für den der öffentliche Schlüssel verwendet werden soll, und den Benutzernamen auf dem Computer, für den Sie den Schlüssel verwenden möchten. Der öffentliche Schlüssel wird auf diesen anderen Computer kopiert und fordert Sie bei Bedarf zur Eingabe Ihres Kennworts auf diesem Computer auf.

Jetzt wird auf der My Personal KeysRegisterkarte der Schlüssel angezeigt.

Angenommen, gnome-keyring-daemon wurde ordnungsgemäß gestartet, als Sie sich bei Lightdm angemeldet haben, und erneut von Ihrem Sitzungsmanager, wenn Sie den Schlüssel zum ersten Mal mit ssh verwenden, werden Sie zur Eingabe der Schlüsselphrase aufgefordert. In diesem Dialogfeld können Sie Detailsdie Schlüsselphrase angeben, das Steuerelement auswählen und verlangen, dass der Schlüsselring bei jeder Anmeldung entsperrt wird - automatisch wird dieser Schlüssel bereitgestellt. Drücken SieOK

Sie werden möglicherweise nicht auf diese Weise aufgefordert, wenn ein anderer Schlüssel zum Anmelden am Remotecomputer verfügbar ist.

Nachdem dies geschehen ist, wird auf der ersten Registerkarte von Seahorse Passwordsein "Kennworteintrag entsperren" für den Schlüsselnamen aufgeführt. Klicken Sie auf das Dreieck vor " Passwörter: Login", um es zu sehen.

John S. Gruber
quelle
Diese Funktion funktioniert also nicht mit Awesome WM. Ich möchte Awesome weiterhin verwenden, damit ich meine Problemumgehung weiterhin verwende.
pl1nk
19

Das Erstellen eines kennwortgeschützten SSH-Schlüssels bleibt über Sitzungen und Neustarts hinweg bestehen

Dies ist wahrscheinlich das, was Sie möchten: Wenn Sie die Schlüsselpassphrase einmal eingeben, ist sie für immer verfügbar, wenn Sie angemeldet sind. Sie funktioniert für die meisten Benutzer, die die Unity- oder Gnome-Desktops verwenden.

  • Wenn Sie nach dem Hinzufügen des öffentlichen Schlüssels zum Remoteserver eine Verbindung herstellen, wird das Dialogfeld ssh-add der GUI angezeigt:

    Geben Sie hier die Bildbeschreibung ein

  • Erweitern Sie die "Details", indem Sie auf das Dreieck klicken. Daraufhin wird Folgendes angezeigt. Die Standardeinstellung ist "Schlüsselring sperren, wenn ich mich abmelde". Hierfür müssen Sie das Kennwort einmal pro Sitzung eingeben:

    Geben Sie hier die Bildbeschreibung ein

  • Ändern Sie es in Automatisch entsperren ... wenn ich angemeldet bin , was bedeutet, dass es funktioniert, wenn Sie sich bei Ihrer Sitzung angemeldet haben - es wird durch Ihr Benutzerkennwort "gesteuert". Es bleibt über Neustarts hinweg bestehen.

    Geben Sie hier die Bildbeschreibung ein

  • Geben Sie die Schlüsselpassphrase einmal ein und fertig - der Schlüssel wird über die erste erfolgreiche Anmeldung bei Ihrer Desktop-Umgebung authentifiziert.


Wenn Sie AwesomeWM verwenden

Getestet mit einer Neuinstallation von AwesomeWM in einer neuen Benutzer-ID

  • Standardmäßig verwendet AwesomeWMssh-agent :

    $ export | grep SSH
    deklariere -x SSH_AGENT_PID = "5479"
    deklarieren Sie -x SSH_AUTH_SOCK = "/ tmp / ssh-fWCKNnPq5440 / agent.5440"
    
  • Damit die oben genannten Schritte funktionieren, müssen Sie gnome-keyring-daemonals SSH-Authentifizierungsdämon und nicht als ssh-agent verwenden. Wenn Sie sich mit lightdm anmelden, wird PAM gestartet, gnome-keyring-daemondas versucht, einen Anmeldeschlüssel mit Ihrem Entsperrkennwort zu entsperren. Sie müssen jedoch Ihre Konfiguration hinzufügen, damit er weiterhin ausgeführt und verwendet wird.

  • Fügen Sie am Ende von Folgendes Folgendes hinzu ~/.xprofile:

      #! / bin / bash
      eval $ (gnome-keyring-daemon --start)
      exportiere SSH_AUTH_SOCK
      Exportieren Sie GNOME_KEYRING_PID
      Exportieren Sie GNOME_KEYRING_CONTROL
    

Die Befehle in der ~/.xprofileDatei werden von xsession ausgeführt, bevor der fantastische Fenstermanager gnome-keyring-daemon --logingestartet wird, und binden ihn über die oben genannten Umgebungsvariablen an den von PAM gestarteten Prozess.

  • Melden Sie sich wieder bei lightdm ab und wieder an. Wenn Sie dies tun ssh user@host, sollten Sie die oben genannten Popups erhalten. Verwenden Sie diese, um Ihre privaten Schlüssel in ~ / .ssh / zu dekodieren und Ihre privaten Schlüssel im Anmeldeschlüsselring des Gnome-Schlüsselbunds zu speichern.

Die allgemeine Lösung für jede Fenstermanager- / Desktopumgebung

  • ist gnome-keyring-daemonanstelle von zu verwenden ssh-agent. Dazu müssen Sie ausgeführt gnome-keyring-daemon und initialisiert werden und dies entweder nach dem ssh-agentStart oder gar nicht tun ssh-agent.

  • ssh(tatsächlich ssh-add) entscheidet anhand des Werts der SSH_AUTH_SOCKUmgebungsvariablen, welcher Authentifizierungsagent aufgerufen werden soll, der durch Eingabe überprüft werden kannexport | grep SOCK

  • Dies ist das Formular SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130für ssh-agent (NICHT das, was Sie möchten, um Ihren Schlüssel speichern zu können)

  • aber von der Form SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"für gnome-keyring-daemon (die Sie wollen)

  • Überprüfen Sie also den Wert und überprüfen Sie, ps aux | grep keyringob der Gnome-Schlüsselring-Daemon ausgeführt wird. Wenn ja, initialisieren Sie ihn mit den Ergebnissen vongnome-keyring-daemon --start

  • Sie können dann die zugehörigen gespeicherten Identitäten in der Konsole überprüfen, indem Sie Folgendes eingeben. ssh-add -lWenn "no agent" angezeigt wird, haben Sie beim Konfigurieren des gnome-keyring-daemon einen Fehler gemacht.

ish
quelle
Nun, das habe ich nicht gesehen! Welchen Befehl darf ich verwenden oder noch besser, welchen Befehl ruft dieser Dialog auf?
Pl1nk
@izx Wenn Sie dies verwenden, ist es notwendig, ssh-add zu verwenden?
John S Gruber
@JohnSGruber Nein, solange die privaten Schlüssel vorhanden sind ~/.ssh, ist keine Verwendung erforderlich. ssh-addDer Dialog wird bei der ersten Verwendung angezeigt . Beachten Sie, dass dies nur in Unity / Gnome funktioniert. Ich habe im Chat festgestellt , dass das OP AwesomeWM verwendet , wo dies nicht funktioniert.
ish
1
@ pl1nk: Bitte sehen Sie die aktualisierte Lösung für AwesomeWM gegen Ende der Antwort.
ish
@izx - Vielen Dank für Ihre allgemeine Unterstützung. Überprüfen Sie meine aktualisierte Frage.
Pl1nk
2

Die Lösung für Ihr Problem ist die Verwendung des SSH-Agenten. Sie müssen das Passwort Ihres Schlüssels nur einmal entsperren, danach wird es vom Agenten gespeichert und automatisch verwendet

  • Generieren Sie ein privates / öffentliches Schlüsselpaar mit ssh-keygen -t dsa
  • Kopieren Sie den öffentlichen Schlüssel auf den Remotecomputer. In der Regel ist dies ~ / .ssh / authorized_keys ( ssh-copy-idhierfür verwenden).
  • Führen Sie diese ssh-addOption aus, bevor Sie sich beim Remote-System anmelden. Hier werden Sie nach Ihrer Passphrase gefragt und diese gespeichert
  • Melden Sie sich beim Remote-System an, kein Kennwort erforderlich

ssh-agent ist im .net gut beschrieben, zum Beispiel hier:

Ein weiterer Vorteil von ssh-agent besteht darin, dass Sie, wenn Sie sich mit dem Remote-System anmelden, ssh -A [email protected]ssh vom Computer domain.name auf einen dritten Computer mit Ihrem öffentlichen Schlüssel übertragen können, ohne dass Sie Ihren privaten Schlüssel auf den Computer domain.name kopieren müssen (und dies niemals sieht Ihren privaten Schlüssel, nur die einmalige Herausforderung / Antwort).

Floyd
quelle
Wie kann ich das machen? Aus den von Ihnen gesendeten Anweisungen geht nicht hervor. Darüber hinaus ist dieses Ubuntu verwandt?
pl1nk
Ich habe meinen Beitrag mit detaillierten Anweisungen bearbeitet
Floyd
Ihre Lösung speichert das Passwort pro Sitzung. In meinem Fall scheint es sich außerdem um einen Konflikt mit dem Gnome-Schlüsselbund zu handeln, wie Sie in meiner Antwort sehen können.
pl1nk
@ pl1nk: Sie müssen also das Passwort sitzungsübergreifend speichern - dh nur einmal für jeden Start gefragt ?
ish
Ja, Sie müssen das Passwort einmal pro Sitzung eingeben. Dies ist die ganze Idee hinter passwortgeschützten SSH-Schlüsseln, um eine weitere Sicherheitsebene zu bieten, die über den Zugriff auf die private Schlüsseldatei nach der Anmeldung hinausgeht.
Floyd
-1

Sie können verwenden

ssh-add 'filename or fullpath'

Sie werden nach der Passphrase gefragt, wenn Ihre Taste eine hat

dann können Sie sich ohne Passwort verbinden

eyadof
quelle
1
Wie ich zu meiner Frage erwähnt habe, suche ich nach einem eleganteren Weg.
Pl1nk
-2

Wenn Sie mit privaten Schlüsseln arbeiten möchten, gehen Sie wie folgt vor:

ssh-keygen -t rsa -N ''

Dann:

kopiere .ssh/id_rsa.pubzum Ziel der Maschine in .ssh/authorized_keysvia scp

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

Alles erledigt.

Stellen Sie ohne Kennwort eine Verbindung zum Remote-Computer her:

ssh user@remote_machine

Und wir haben keine Passwortabfrage.

Octávio Filipe Gonçalves
quelle
Dadurch werde ich jedes Mal nach dem Schlüsselkennwort gefragt.
Pl1nk
1
Wahrscheinlich, weil Sie beim Ausführen von ssh-keygen -t rsa -N '' ein Passwort eingeben. Wenn Sie den obigen Befehl ausführen, geben Sie kein Passwort ein, sondern drücken Sie nur die EINGABETASTE.
Octávio Filipe Gonçalves
Nun, ich hätte gerne Schlüssel mit Passwort. Ich habe meine Frage aktualisiert
pl1nk
1
Ok, ich finde nicht heraus, warum Sie dies mit Passwort tun möchten. Normalerweise wird dieses Konzept nur verwendet, um Verbindungen mit Remotecomputern herzustellen, die den Clientcomputer ohne Authentifizierung erkennen können. Wenn Sie dieses Szenario nicht möchten, müssen Sie nur eine normale SSH-Verbindung ausführen. richtig?
Octávio Filipe Gonçalves
1
Es ist etwas brutal, den Leuten zu sagen, dass sie ihren öffentlichen Schlüssel über die autorisierten Schlüssel auf einem Remotecomputer kopieren sollen ... Viel besser ist es, den Befehl ssh-copy-id user @ remotemachine zu verwenden, der sich beim ersten Mal und dann als Kennwort anmeldet APPEND überschreibt den Schlüssel nicht.
Floyd