Dies ist ein typisches Beispiel für einen Kompromiss zwischen Sicherheit und Komfort. Zum Glück gibt es eine Reihe von Möglichkeiten. Die am besten geeignete Lösung hängt vom Verwendungsszenario und der gewünschten Sicherheitsstufe ab.
SSH-Schlüssel mit Passwort, nein ssh-agent
Jetzt muss die Passphrase jedes Mal eingegeben werden, wenn der Schlüssel zur Authentifizierung verwendet wird. Dies ist vom Standpunkt der Sicherheit aus die beste Option, bietet jedoch die schlechteste Verwendbarkeit. Dies kann auch dazu führen, dass eine schwache Passphrase gewählt wird, um die Last der wiederholten Eingabe zu verringern.
ssh-key mit passphrase, mit ssh-agent
Wenn Sie Folgendes hinzufügen, ~/.bash_profilewerden ssh-agentdie SSH-Schlüssel beim Anmelden automatisch gestartet und geladen:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Jetzt muss die Passphrase bei jedem Login eingegeben werden. Unter dem Gesichtspunkt der Benutzerfreundlichkeit ist dies zwar etwas besser, hat aber den Nachteil, dass Sie zur ssh-agentEingabe der Passphrase aufgefordert werden, unabhängig davon, ob der Schlüssel während der Anmeldesitzung verwendet werden soll oder nicht. Jedes neue Login erzeugt auch eine bestimmte ssh-agentInstanz, die mit den hinzugefügten Schlüsseln im Speicher auch nach dem Abmelden ausgeführt wird, sofern dies nicht ausdrücklich beendet wird.
Um ssh_agentbeim Abmelden abzubrechen, fügen Sie Folgendes zu hinzu~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
oder folgendes an ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
Das Erstellen mehrerer ssh-agentInstanzen kann vermieden werden, indem an einem festen Speicherort im Dateisystem ein permanenter Kommunikationssocket für den Agenten erstellt wird, z. B. in der Antwort von Collin Anderson . Dies ist eine Verbesserung gegenüber dem Spawnen mehrerer Agenteninstanzen, sofern der entschlüsselte Schlüssel nach dem Abmelden nicht explizit beendet wird.
Auf Desktops können die in der Desktop-Umgebung enthaltenen ssh-Agenten wie der Gnome-Schlüsselring-SSH-Agent eine bessere Methode sein, da sie normalerweise die Passphrase abfragen, wenn der ssh-Schlüssel zum ersten Mal während einer Anmeldesitzung und verwendet wird Speichern Sie den entschlüsselten privaten Schlüssel bis zum Ende der Sitzung im Speicher.
ssh-key mit passphrase, mit ssh-ident
ssh-identist ein Dienstprogramm, das ssh-agentin Ihrem Namen verwaltet und Identitäten nach Bedarf lädt. Es werden nur einmal benötigte Schlüssel hinzugefügt, unabhängig von der Anzahl der Terminals, SSH- oder Anmeldesitzungen, für die ein Zugriff erforderlich ist ssh-agent. Es kann auch einen anderen Agenten und einen anderen Schlüsselsatz hinzufügen und verwenden, je nachdem, mit welchem Host eine Verbindung hergestellt wird oder von welchem Verzeichnis aus ssh aufgerufen wird. Dies ermöglicht das Isolieren von Schlüsseln, wenn die Agentenweiterleitung mit verschiedenen Hosts verwendet wird. Es ermöglicht auch die Verwendung mehrerer Konten auf Websites wie GitHub.
Um es zu aktivieren ssh-ident, installieren Sie es und fügen Sie den folgenden Alias zu Ihrem hinzu ~/bash_profile:
alias ssh='/path/to/ssh-ident'
ssh-key mit passphrase, mit keychain
keychainist ein kleines Hilfsprogramm, das ssh-agentin Ihrem Auftrag verwaltet wird und das ssh-agentnach Beendigung der Anmeldesitzung weiterhin ausgeführt werden kann. Bei nachfolgenden Anmeldungen keychainwird eine Verbindung mit der vorhandenen ssh-agentInstanz hergestellt. In der Praxis bedeutet dies, dass die Passphrase erst bei der ersten Anmeldung nach einem Neustart eingegeben werden muss. Bei nachfolgenden Anmeldungen wird der unverschlüsselte Schlüssel der vorhandenen ssh-agentInstanz verwendet. Dies kann auch nützlich sein, um die kennwortlose RSA / DSA-Authentifizierung in cronJobs ohne kennwortlose SSH-Schlüssel zuzulassen .
Zum Aktivieren keychaininstallieren Sie es und fügen Folgendes hinzu ~/.bash_profile:
eval `keychain --agents ssh --eval id_rsa`
Aus sicherheitstechnischer Sicht ssh-identund keychainsind schlechter als ssh-agentInstanzen der Lebensdauer einer bestimmten Sitzung beschränkt, sondern sie bieten ein hohes Maß an Komfort. Um die Sicherheit von zu verbessern keychain, fügen einige Benutzer die --clearOption zu ihrem ~/.bash_profileSchlüsselbundaufruf hinzu. In diesem Fall müssen die Passphrasen beim Anmelden wie oben beschrieben erneut eingegeben werden. cronJobs haben jedoch nach dem Abmelden des Benutzers weiterhin Zugriff auf die unverschlüsselten Schlüssel. Die keychain Wiki-Seite enthält weitere Informationen und Beispiele.
ssh-key ohne passphrase
Aus Sicherheitsgründen ist dies die schlechteste Option, da der private Schlüssel für den Fall, dass er offengelegt wird, vollständig ungeschützt ist. Dies ist jedoch die einzige Möglichkeit, um sicherzustellen, dass die Passphrase nach einem Neustart nicht erneut eingegeben werden muss.
ssh-key mit passphrase, mit ssh-agent , passphrase ssh-add vom script übergeben
Es scheint zwar eine einfache Idee zu sein, die Passphrase ssh-addvon einem Skript aus zu übergeben, echo "passphrase\n" | ssh-adddies ist jedoch nicht so einfach, wie es scheint, da ssh-add die Passphrase nicht gelesen wird stdin, sondern /dev/ttydirekt zum Lesen geöffnet wird .
Dies kann umgangen mit expectfür die Automatisierung von interaktiven Anwendungen, ein Werkzeug. Unten sehen Sie ein Beispiel für ein Skript, das einen SSH-Schlüssel mithilfe einer im Skript gespeicherten Passphrase hinzufügt:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
Beachten Sie, dass die Passphrase im Skript im Klartext gespeichert ist. Aus Sicht der Sicherheit ist dies kaum besser als ein passwortloser SSH-Schlüssel. Wenn dieser Ansatz verwendet werden soll, muss sichergestellt werden, dass für das expectSkript, das die Passphrase enthält, die richtigen Berechtigungen festgelegt sind, sodass es nur vom Schlüsseleigentümer gelesen, geschrieben und ausgeführt werden kann.