GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ssh – Wie führt man ssh-add automatisch ohne Passwortabfrage aus?

Ich möchte zwischen mehreren Computern in meinem Netzwerk (statisches Ethernet) über SSH kommunizieren. Um dies zu tun, muss ich jedes Mal ssh-add ausführen, wenn ich mich auf einem bestimmten Computer anmelde. Wie kann ich es tun, damit es einmal eingerichtet wird und mich nicht jedes Mal nach der Passphrase fragt, wenn ich mich anmelde oder neu starte? meine Maschine?

Ich weiß, dass es eine Möglichkeit gibt, dem bash_profile einige Zeilen hinzuzufügen Datei, aber ich muss das Passwort trotzdem jedes Mal eingeben, wenn ich neu starte/sich an einem bestimmten Computer anmelde.

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Akzeptierte Antwort:

Dies ist ein typisches Beispiel für einen Kompromiss zwischen Sicherheit und Komfort. Zum Glück gibt es mehrere Möglichkeiten. Die am besten geeignete Lösung hängt vom Nutzungsszenario und dem gewünschten Sicherheitsniveau ab.

ssh-key mit passphrase, nein ssh-agent

Jetzt muss die Passphrase jedes Mal eingegeben werden, wenn der Schlüssel zur Authentifizierung verwendet wird. Dies ist zwar aus Sicherheitsgründen die beste Option, bietet aber die schlechteste Benutzerfreundlichkeit. Dies kann auch dazu führen, dass eine schwache Passphrase gewählt wird, um die Belastung durch wiederholte Eingabe zu verringern.

ssh-key mit passphrase, mit ssh-agent

Folgendes zu ~/.bash_profile hinzufügen startet automatisch ssh-agent und laden Sie die ssh-Schlüssel beim Login:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Nun muss die Passphrase bei jedem Login eingegeben werden. Dies ist zwar aus Sicht der Benutzerfreundlichkeit etwas besser, hat aber den Nachteil, dass ssh-agent fordert zur Eingabe der Passphrase auf, unabhängig davon, ob der Schlüssel während der Anmeldesitzung verwendet werden soll oder nicht. Jede neue Anmeldung erzeugt auch einen eigenen ssh-agent Instanz, die auch nach dem Abmelden mit den hinzugefügten Schlüsseln im Speicher weiterläuft, sofern sie nicht explizit beendet wird.

Um ssh_agent zu beenden Fügen Sie beim Abmelden Folgendes zu ~/.bash_logout hinzu

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

oder Folgendes zu ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Erstellen mehrerer ssh-agent Instanzen können vermieden werden, indem ein dauerhafter Kommunikationssocket zum Agenten an einer festen Stelle im Dateisystem erstellt wird, wie z. B. in Collin Andersons Antwort. Dies ist eine Verbesserung gegenüber dem Spawnen mehrerer Agenteninstanzen, jedoch bleibt der entschlüsselte Schlüssel nach dem Abmelden immer noch im Speicher, es sei denn, er wird explizit beendet.

Auf Desktops können ssh-Agenten, die in der Desktop-Umgebung enthalten sind, wie der Gnome Keyring SSH Agent, ein besserer Ansatz sein, da sie normalerweise dazu gebracht werden können, die Passphrase einzugeben, wenn der ssh-Schlüssel zum ersten Mal während einer Anmeldesitzung verwendet wird und 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 verwalten kann in Ihrem Namen und laden Identitäten nach Bedarf. Es fügt Schlüssel nur einmal bei Bedarf hinzu, unabhängig davon, wie viele Terminals, SSH- oder Anmeldesitzungen Zugriff auf einen ssh-agent benötigen . Es kann auch einen anderen Agenten und einen anderen Satz von Schlüsseln 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.

Verwandte:Php:imagecropauto – Beschneidet ein Bild automatisch mit einem der verfügbaren Modi

Um ssh-ident zu aktivieren , installieren Sie es und fügen Sie den folgenden Alias ​​zu Ihrem ~/bash_profile hinzu :

alias ssh='/path/to/ssh-ident'

ssh-key mit passphrase, mit keychain

keychain ist ein kleines Dienstprogramm, das ssh-agent verwaltet in Ihrem Namen und
erlaubt dem ssh-agent ausgeführt zu bleiben, wenn die Anmeldesitzung endet. Bei späteren Anmeldungen keychain verbindet sich mit dem bestehenden ssh-agent Beispiel. In der Praxis bedeutet dies, dass die Passphrase nur beim ersten Login nach einem Neustart eingegeben werden muss. Bei nachfolgenden Anmeldungen der unverschlüsselte Schlüssel aus dem vorhandenen ssh-agent Instanz verwendet wird. Dies kann auch nützlich sein, um eine passwortlose RSA/DSA-Authentifizierung in cron zu ermöglichen Jobs ohne passwortlose SSH-Schlüssel.

Um keychain zu aktivieren , installieren Sie es und fügen Sie etwas wie das Folgende zu ~/.bash_profile hinzu :

eval `keychain --agents ssh --eval id_rsa`

Aus Sicherheitssicht ssh-ident und keychain sind schlechter als ssh-agent Instanzen, die auf die Lebensdauer einer bestimmten Sitzung begrenzt sind, aber ein hohes Maß an Komfort bieten. Um die Sicherheit von keychain zu verbessern , einige Leute fügen den --clear hinzu Option zu ihrem ~/.bash_profile hinzufügen Schlüsselbund-Aufruf. Dabei müssen Passphrasen wie oben beim Login neu eingegeben werden, aber cron Jobs haben weiterhin Zugriff auf die unverschlüsselten Schlüssel, nachdem sich der Benutzer abgemeldet hat. Der keychain Wiki-Seite enthält weitere Informationen und Beispiele.

ssh-Schlüssel ohne Passphrase

Aus Sicherheitsgründen ist dies die schlechteste Option, da der private Schlüssel im Falle einer Offenlegung völlig ungeschützt ist. Nur so kann jedoch sichergestellt werden, dass die Passphrase nach einem Neustart nicht erneut eingegeben werden muss.

ssh-key mit passphrase, mit ssh-agent , Passphrase übergeben an ssh-add aus dem Skript

Obwohl es wie eine einfache Idee erscheinen mag, die Passphrase an ssh-add zu übergeben aus einem Skript, z. echo "passphrase\n" | ssh-add , das ist nicht so einfach, wie es scheint, wie ssh-add liest die Passphrase nicht aus stdin , öffnet aber /dev/tty direkt zum Lesen.

Dies kann mit expect umgangen werden , ein Tool zur Automatisierung interaktiver Anwendungen. Unten sehen Sie ein Beispiel für ein Skript, das einen SSH-Schlüssel mit 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, da die Passphrase im Klartext im Skript gespeichert ist, dies aus Sicherheitsgründen kaum besser ist als ein passwortloser SSH-Schlüssel. Wenn dieser Ansatz verwendet werden soll, ist es wichtig sicherzustellen, dass der expect Für das Skript, das die Passphrase enthält, sind die richtigen Berechtigungen festgelegt, sodass es nur vom Eigentümer des Schlüssels gelesen, geschrieben und ausgeführt werden kann.


Linux
  1. MySQLdump ohne Passwort im Cronjob

  2. So führen Sie SSH und SCP ohne Passwort von SSH2 zu OpenSSH durch

  3. So richten Sie Rsync mit SSH unter UNIX / Linux ein (rsync ohne Passwort)

  4. Wie übergebe ich das Passwort an su/sudo/ssh, ohne das TTY zu überschreiben?

  5. Wie führe ich ein Skript als ein anderer Benutzer ohne Passwort aus?

So führen Sie den Sudo-Befehl ohne Passwort aus

So richten Sie die SSH-Anmeldung ohne Passwort ein

So führen Sie bestimmte Befehle ohne Sudo-Passwort in Linux aus

So führen Sie Sudo-Befehle ohne Passwort aus

So führen Sie sudo-Befehle ohne Passwort aus

So kopieren Sie Dateien aus der Ferne über SSH, ohne ein Passwort einzugeben