Ist es in Ordnung, einen SSH-Schlüssel mit einer leeren Passphrase zu verwenden?

34

Als ich das erste Mal lernte, wie man ssh-Schlüssel erstellt, wurde in den von mir gelesenen Tutorials festgelegt, dass eine gute Passphrase gewählt werden sollte. Als ich kürzlich einen Daemon-Prozess einrichtete, der ssh auf einen anderen Computer ausführen muss, stellte ich fest, dass der einzige Weg (anscheinend), einen Schlüssel zu haben, den ich nicht bei jedem Start authentifizieren muss, darin besteht, einen Schlüssel mit einem leeren zu erstellen Passphrase. Meine Frage ist also, was sind die Bedenken bei der Verwendung eines Schlüssels ohne Passphrase?

Mozillalives
quelle

Antworten:

38

Ein Schlüssel ohne Passphrase ist davon abhängig, dass niemand sonst an diesen Schlüssel gelangen kann (wer würde nicht an die Ressourcen gelangen können, auf die er ohnehin Zugriff hat). Wenn der Schlüssel den Zugriff auf eine Maschine daneben gewährt und beide Maschinen über die gleiche elektronische und physische Sicherheit verfügen, ist dies keine große Sache.

Befindet sich Ihr Schlüssel hingegen auf einem Computer mit unzureichender Sicherheit (möglicherweise hat er viele nicht vertrauenswürdige Benutzer, ist physisch leicht zugänglich oder wird mit dem Patch-Regime nicht immer auf dem neuesten Stand gehalten), ist dies wahrscheinlich nicht der Fall. Ich möchte dort keine Schlüssel ohne Passphrase behalten.

Letztendlich liegt es am Vertrauen in Ihr Setup und an der Abwägung der Risiken / Kosten, auf die Sie zugreifen können. Wenn Sie sicher sein können, dass es für einen Angreifer nicht realistischer ist, auf den Schlüssel zuzugreifen, als auf die Ressource, auf die Sie Zugriff haben , dann geht es dir gut. Wenn Sie dieses Vertrauen nicht haben, sollten Sie wahrscheinlich die Gründe dafür herausfinden :)

Mo.
quelle
Nur vertrauenswürdige Personen haben mit den Schlüsseln Zugriff auf das Gerät. Ich denke, das beantwortet meine Frage. Vielen Dank.
Mozillalives
11

Eine weitere Lösung, die die Sicherheit erhöht und Sie gleichzeitig entlastet, sodass Sie Ihr Kennwort nicht ständig eingeben müssen:

Wenn Sie Ihren privaten Schlüssel verschlüsseln möchten, können Sie ihn ssh-agentauf Ihrer Workstation verwenden, um den unverschlüsselten Schlüssel zwischenzuspeichern. Wenn Sie Ihren entschlüsselten Schlüssel speichern möchten, führen Sie ssh-add ~/.ssh/id_rsaoder was auch immer Ihr privater Schlüssel heißt. Sie werden aufgefordert, das Kennwort einzugeben, und der entschlüsselte Schlüssel steht für Ihre SSH-Verbindungen zur Verfügung, bis Sie sich abmelden, beenden ssh-agentoder herunterfahren.

Sie können killdie gespeicherten Schlüssel mit ssh-agent -kund Sie können ssh-agent -t [seconds]zum Beispiel eine Lebensdauer für den Schlüssel zuweisen, der sich im Speicher befindet ; Wenn Sie Ihren Schlüssel nicht für immer entschlüsseln möchten, sondern viel um Ihre Hosts herum ssh-en möchten, können Sie das Timeout auf 5-10 Minuten einstellen. Sie müssen also das Kennwort Ihres Schlüssels nicht ständig eingeben.

Auch dies hängt alles damit zusammen, wie sicher Sie in Bezug auf die Sicherheit Ihrer / workstation / sind. Wenn Sie der einzige sind, der Zugriff darauf hat, und Sie über ein ziemlich sicheres lokales Kennwort verfügen, ist dies nicht der Fall Laden Sie Exploits und Rootkits zu sich selbst ein. Ihr passphrasenloser privater Schlüssel ist einigermaßen sicher.

Wenn Sie wie ich sind und Ihren privaten Schlüssel auf einem USB-Stick aufbewahren, möchten Sie diesen auf jeden Fall verschlüsseln, auch wenn es sich nur um einen privaten Schlüssel handelt (ein separater Schlüssel, den ich auf meiner Workstation verwende) Wenn ich meinen Schlüssel verliere, kann ich einfach den öffentlichen Schlüssel des ~/.ssh/authorized_keysUSB-Sticks von der Liste meines Servers entfernen , wodurch auch ein / ausgezeichneter / Grund angezeigt wird, NÜTZLICHE Kommentare zu Ihren öffentlichen Schlüsseln hinzuzufügen.

In Ihrer Antwort auf eine frühere Antwort sagten Sie, dass nur Personen, denen Sie vertrauen, mit den Schlüsseln Zugriff auf das Gerät haben. Ich möchte nur klarstellen, dass sich Ihr privater Schlüssel NICHT auf dem Server befinden muss, zu dem Sie eine Verbindung herstellen, falls Sie dies tun. Nur Ihr öffentlicher Schlüssel muss sich auf dem Server befinden, und das ist kein Problem, weshalb es sich um einen "öffentlichen" Schlüssel handelt.

oh, ich habe vergessen zu erwähnen; Ich ssh-agentstarte , wenn ich X starte. Andernfalls werden die entschlüsselten Schlüssel, mit ssh-adddenen ich speichere, nicht in verschiedenen xtermSitzungen beibehalten. Ich muss das Kennwort jedes Mal neu eingeben , wenn ich das Programm schließe, in dem xtermich gestartet habe ssh-add. In meiner ~/.xinitrcDatei habe ich:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

Ich muss den Aufruf ssh-agenteinschließen, evalda ssh-agent einige Umgebungsvariablen zurückgibt, die festgelegt werden müssen, wenn es ausgeführt wird, und von denen aus ~/.xinitrcdie Umgebungsvariablen während der gesamten X-Sitzung konstant sind.

cpbills
quelle
Ja, ich weiß, ich muss nur den öffentlichen Schlüssel hochladen. Es ist nur so, dass ich einen Server mit einem anderen verbinde, weshalb ich das erwähnt habe. Aber danke, dass Sie diese klare und nachdenkliche Antwort geschrieben haben.
Mozillalives
Nun, wenn Sie es verwenden ssh-agentund verwenden ssh -A -i privkey user@host, wird es die Weiterleitung von ssh-Agenten ermöglichen, wodurch Sie vom ersten Server aus auf einen Server zugreifen können, ohne Ihren privaten Schlüssel auf dem ersten Server abzulegen. Die SSH-Verkettung wird auch ohne aktivierte SSH-Schlüsselweiterleitung nicht empfohlen und ssh -Ahat ihre eigenen Sicherheitsbedenken. Es gibt keinen Grund, warum der Schlüssel auf dem Server nicht verschlüsselt werden kann, während der Schlüssel auf Ihrer Workstation ohne Passphrase ist.
CPBills
3

Sie können sich eine ähnliche Frage ansehen , die ich zu privaten SSL-Schlüsseln für Webserver gestellt habe. Grundsätzlich gibt es drei Möglichkeiten:

  1. Schützen Sie den Schlüssel mit Dateisystem-Berechtigungen.
  2. Verwenden Sie einen kennwortgeschützten Schlüssel und geben Sie ihn bei jedem Neustart manuell ein.
  3. Verwenden Sie einen kennwortgeschützten Schlüssel und speichern Sie den Schlüssel im Dateisystem, um den Neustart zu automatisieren.

Jeder von ihnen ist fehlerhaft, also hängt alles davon ab, was Sie am meisten fürchten.

chmeee
quelle
1

Für den automatisierten Zugriff, der, wie Sie sagen, Schlüssel ohne Passphrase erfordert, verwende ich immer die zusätzlichen Optionen von authorized_keys (siehe sshd (8)), um den Befehl einzuschränken, der ausgeführt werden kann.

Normalerweise stelle ich auf der Remote-Seite ein sorgfältig geschriebenes Skript bereit, das genau den Job (oder die Jobs - es können Parameter betrachtet werden) ausführt, den ich zulassen möchte.

Dann sperre ich es auch auf die IP-Adressen herunter, die mit diesem Schlüssel verbunden werden können (nicht 100% narrensicher, aber auch mit der Befehlsbeschränkung in Ordnung).

jrg
quelle
Hervorragender Punkt - wenn Sie ungeschützte Schlüssel benötigen, ist das Beste, was Sie tun können, diese zu sperren!
MikeyB
1

Solange niemand außer Ihnen Zugriff auf den Schlüssel hat, benötigen Sie keine Passphrase. Tatsächlich können Sie keine Passphrase für Schlüssel verwenden, die von automatisierter Software verwendet werden.

Fahad Sadah
quelle
0

Wenn Sie ssh für jede Art von automatisiertem Vorgang verwenden möchten - ich denke speziell an Nagios-Prüfungen -, möchten Sie wahrscheinlich keine Passphrase verwenden.

In dieser Situation würden Sie dies wahrscheinlich nicht außerhalb eines LANs verwenden, und Sie hätten den Schlüssel sicher auf dem Server gespeichert, der die Prozedur ausführt.

In den meisten Tutorials zu SSH wird davon ausgegangen, dass sich eine Person von einem externen Netzwerk aus anmeldet, möglicherweise von einem unsicheren Computer aus. In diesem Fall ist der Hinweis korrekt.

Erstellen Sie grundsätzlich eine Passphrase, es sei denn, Sie wissen, dass es einen guten Grund gibt, dies nicht zu tun. Zu faul zu sein, um jedes Mal dein Passwort einzugeben, könnte für dich ein guter Grund sein :-)

dunxd
quelle
Selbst wenn sie sich über ein externes Netzwerk anmelden, wie macht das einen Unterschied? Nur die Sicherheit des Client-Computers ist von Bedeutung, die Passphrase wird auf der Client-Seite behandelt, oder?
NJSG
Bis Ihr Client-Laptop gestohlen wird und Ihren Perimeter durchbricht, bevor jemand die Möglichkeit hat, den SSH-Schlüssel zu widerrufen. Eine Passphrase auf dem Schlüssel würde Ihnen mehr Zeit geben, die Schlüssel zu widerrufen.
3.
Also, wie gesagt, "Nur die Sicherheit des Client-Computers ist wichtig".
njsg