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_profile
werden ssh-agent
die 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-agent
Eingabe 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-agent
Instanz, 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_agent
beim 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-agent
Instanzen 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-ident
ist ein Dienstprogramm, das ssh-agent
in 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
keychain
ist ein kleines Hilfsprogramm, das ssh-agent
in Ihrem Auftrag verwaltet wird und das ssh-agent
nach Beendigung der Anmeldesitzung weiterhin ausgeführt werden kann. Bei nachfolgenden Anmeldungen keychain
wird eine Verbindung mit der vorhandenen ssh-agent
Instanz 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-agent
Instanz verwendet. Dies kann auch nützlich sein, um die kennwortlose RSA / DSA-Authentifizierung in cron
Jobs ohne kennwortlose SSH-Schlüssel zuzulassen .
Zum Aktivieren keychain
installieren Sie es und fügen Folgendes hinzu ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
Aus sicherheitstechnischer Sicht ssh-ident
und keychain
sind schlechter als ssh-agent
Instanzen 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 --clear
Option zu ihrem ~/.bash_profile
Schlüsselbundaufruf hinzu. In diesem Fall müssen die Passphrasen beim Anmelden wie oben beschrieben erneut eingegeben werden. cron
Jobs 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-add
von einem Skript aus zu übergeben, echo "passphrase\n" | ssh-add
dies ist jedoch nicht so einfach, wie es scheint, da ssh-add
die Passphrase nicht gelesen wird stdin
, sondern /dev/tty
direkt zum Lesen geöffnet wird .
Dies kann umgangen mit expect
fü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 expect
Skript, das die Passphrase enthält, die richtigen Berechtigungen festgelegt sind, sodass es nur vom Schlüsseleigentümer gelesen, geschrieben und ausgeführt werden kann.