Ich möchte über SSH zwischen mehreren Computern in meinem Netzwerk (statisches Ethernet) kommunizieren. Dazu muss ich jedes Mal, wenn ich mich auf einem bestimmten Computer anmelde, ssh-add ausführen. Wie kann ich dies tun, damit es einmal eingerichtet wird und mich nicht jedes Mal, wenn ich mich anmelde oder neu starte, nach der Passphrase fragt? meine Maschine?
Ich weiß, dass es eine Möglichkeit gibt, der bash_profile
Datei einige Zeilen hinzuzufügen , aber ich muss das Kennwort jedes Mal eingeben, wenn ich mich bei einem bestimmten Computer neu starte / anmelde.
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Antworten:
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
werdenssh-agent
die SSH-Schlüssel beim Anmelden automatisch gestartet und geladen: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 bestimmtessh-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
oder folgendes an
~/.bash_profile
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, dasssh-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 istssh-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
:ssh-key mit passphrase, mit
keychain
keychain
ist ein kleines Hilfsprogramm, dasssh-agent
in Ihrem Auftrag verwaltet wird und dasssh-agent
nach Beendigung der Anmeldesitzung weiterhin ausgeführt werden kann. Bei nachfolgenden Anmeldungenkeychain
wird eine Verbindung mit der vorhandenenssh-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 vorhandenenssh-agent
Instanz verwendet. Dies kann auch nützlich sein, um die kennwortlose RSA / DSA-Authentifizierung incron
Jobs ohne kennwortlose SSH-Schlüssel zuzulassen .Zum Aktivieren
keychain
installieren Sie es und fügen Folgendes hinzu~/.bash_profile
:Aus sicherheitstechnischer Sicht
ssh-ident
undkeychain
sind schlechter alsssh-agent
Instanzen der Lebensdauer einer bestimmten Sitzung beschränkt, sondern sie bieten ein hohes Maß an Komfort. Um die Sicherheit von zu verbessernkeychain
, 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. Diekeychain
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
, passphrasessh-add
vom script übergebenEs 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, dassh-add
die Passphrase nicht gelesen wirdstdin
, 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: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.quelle
ssh-agent
Snippet in,~/.bash_profile
wie in der Antwort erläutert. Vielleicht möchten Sie sich daskeychain
Dienstprogramm ansehen . Beikeychain
der ersten Anmeldung nach dem Neustart müssen Sie das Kennwort eingeben, bei den nachfolgenden Anmeldungenkeychain
wird jedoch eine Verbindung zu einer vorhandenenssh-agent
Instanz mit dem entschlüsselten Schlüssel im Speicher hergestellt. Abgesehen davon gibt es die Möglichkeit, einen SSH-Schlüssel ohne Passphrase zu generieren, dies wird jedoch natürlich nicht empfohlen.ssh-add
von einem Skript an zu übergeben. Der Grundecho "pass\n" | ssh-add
dafür ist, dassssh-add
das Passwort nicht gelesen wirdstdin
, sondern/dev/tty
direkt zum Lesen geöffnet wird. Die Antwort wurde aktualisiert und enthält nun eine Problemumgehung mit einem Dienstprogramm namensexpect
.gssapi-with-mic
. Dies wird normalerweise in größeren Netzwerken verwendet, aber wenn Sie Interesse daran haben, lohnt es sich vielleicht, dies zu prüfen.Fügen Sie dies zu Ihrem
~/.bashrc
Konto hinzu und melden Sie sich dann ab und wieder an, damit es wirksam wird.Dies sollte nur bei der ersten Anmeldung nach jedem Neustart zur Eingabe eines Kennworts auffordern. Es wird immer wieder verwendet,
ssh-agent
solange es ausgeführt wird.quelle
ssh-add -l
Gibt den Exit-Code 0 zurück, wenn der Agent über Identitäten verfügt, und 1, wenn dies nicht der Fall ist. Sie können grep aus dem letzten Befehl ausschneiden undssh-add -l > '/dev/null' || ssh-add
Nicht eng mit der Frage des OP verwandt, könnte aber für andere nützlich sein: Seit 7.2.0 verfügt ssh (1) über eine Option, die das Hinzufügen eines Schlüssels zum ssh-agent bei der ersten Authentifizierung ermöglicht; die Option ist
AddKeysToAgent
und eingestellt werden kannyes
,no
,ask
, oderconfirm
, systemweite oder Ihre persönliche.ssh/config
Datei.Referenz: https://www.openssh.com/txt/release-7.2
quelle
.ssh/config
Datei sind: Dies gilt fürssh
und alles, wasssh
dahinter stecktscp
, und kann auf Host-Basis durchgeführt werden.ssh-agent
speichert verschiedene nicht gesperrte SSH-Schlüssel im Cache, sodass Sie SSH-Schlüssel durch Kennwörter schützen können, ohne sie jedes Mal eingeben zu müssen.Um entsperrte Schlüssel zwischenzuspeichern, müssen diese natürlich entsperrt werden. Zum Entsperren von Schlüsseln, die mit einer Passphrase gesperrt sind, müssen diese Passphrasen natürlich bekannt sein.
Jede Methode, die keine Autorisierung durch einen Menschen erfordert (z. B. "Passwort eingeben"), macht Ihr System nicht nur unsicher. es macht auch den gesamten Zweck des SSH-Agenten bedeutungslos.
Nach alledem können Sie einfach SSH-Schlüssel verwenden, die nicht kennwortgeschützt sind ( Enterdrücken Sie, wenn Sie während der Schlüsselgenerierung nach einem Kennwort gefragt werden). Da es kein Passwort gibt,
ssh-agent
müssen Sie nicht nach einem fragen, um es (nicht) zwischenzuspeichern.quelle
Hier ist eine Problemumgehung, um Ihre SSH-Passphrase zu automatisieren.
Erstellen Sie ein einzeiliges Skript, das Ihre Passphrase in der Standardausgabe ausgibt, z. B .:
Wichtig: Stellen Sie sicher, dass Sie den führenden Bereich kopieren, um zu verhindern , dass Ihr Kennwort in Ihrem Verlauf gespeichert wird .
Und verwenden Sie eine der folgenden Methoden.
Verwenden eines Standardeingabeansatzes:
oder Named-Pipe- Ansatz:
Erstellen Sie eine Named Pipe (Sie können auch eine Prozessersetzung versuchen ):
Führen Sie dies
ssh-add
aus, indem Sie das für die Authentifizierung verwendete Programm angeben:Siehe:
man ssh-add
um mehr darüber zu lesenSSH_ASKPASS
.quelle
echo my_passphrase
ist eine große Sicherheitslücke. Nachdem Sie es eingegeben haben, wird das Kennwort in der Verlaufsdatei der von Ihnen verwendeten Shell als Klartext angezeigt. Und zweite Befehlszeilenargumente sind unter Unix (ps -ef
) weltweit lesbar . Geben Sie niemals Passwörter in Befehlszeilenargumente ein!ps
Ausgabe angezeigten Passworts nicht gelöst . Die Verlaufsdatei kann in der Regel ohnehin nur von dem Benutzer gelesen werden, die Befehlszeilen können jedoch von allen Benutzern auf einem System gelesen werden.Ich werde nicht empfehlen, dass Sie ssh-add (das einen ssh-Agenten öffnen muss) bei der Anmeldung verwenden. Dies liegt daran, dass Sie nicht steuern können, wann der Abschnitt ssh-agent endet, und ein Sicherheitsrisiko verursachen können, wenn Sie die Schlüsseldateien nicht in einem Anmeldeabschnitt verwenden müssen.
Ich empfehle vielmehr, ein Skript zu schreiben, das die Unter-Shell eines SSH-Agenten mit allen automatisch hinzugefügten Schlüsseldateien öffnet und bei Bedarf aufgerufen wird, um SSH zu verwenden. Wenn Sie dies übernehmen könnten, lesen Sie weiter.
Sie hätten zwei Möglichkeiten:
Entfernen Sie alle Passphrasen für Ihre Schlüssel, die eine schwache Sicherheit aufweisen, wenn Ihre Schlüsseldateien gestohlen werden. (daher nicht zu empfehlen )
Verwenden Sie für Ihre Schlüssel dieselbe Passphrase. In diesem Fall müssen Sie
ssh-add keyfile1 keyfile2 ...
die Passphrase nur einmal pro Abschnitt eingeben.In beiden Fällen können Sie die folgende Skriptdatei "ssh_keys_section.sh" schreiben:
Bemerkungen:
ssh-keygen -p -f keyfile
/path/to/yourterminal &
(abhängig vom Betriebssystem) verwenden.quelle
/path/to/yourterminal &
==>mintty &
quelle
Früher habe ich das von steampowered erwähnte Skript verwendet, jetzt habe ich das folgende Skript erstellt, da keine Dateien herumliegen.
zsh
Nur an der Shell arbeiten.quelle
Geben Sie hier Ihre Gutschrift ab: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html
Diese Lösung wird auch hier unterstützt: http://mah.everybody.org/docs/ssh
quelle
Single Sign On-Lösung für SSH könnte mich dazu führen
pam_ssh
.Nach diesem Artikel lautet das Konzept:
Ich habe nicht überprüft, dass dies tatsächlich funktionieren würde.
quelle
Fügen Sie dies zu Ihrer
~/.bashrc
Datei hinzu:quelle
Um einen (möglicherweise kennwortlosen) Schlüssel hinzuzufügen und sicherzustellen, dass Sie
ssh-add
nicht zur Eingabe eines Kennworts aufgefordert werden, auch wenn Sie unter X ausgeführt werden :Der Beendigungsstatus zeigt Erfolg oder Misserfolg an.
quelle
Wenn Sie Seepferdchen als Ihr Passwort-Manager verwenden ... Was Sie wahrscheinlich sind; D
Eine andere Lösung, die das gesuchte Ziel erreicht, besteht darin, die SSH-Schlüssel zu seahorse hinzuzufügen, um sie beim Anmelden automatisch zu entsperren. Der Hauptvorteil dabei ist, dass Sie nach der Anmeldung über gdm oder mit was auch immer Sie sich anmelden, niemals ein Kennwort für die Schlüssel eingeben müssen, selbst wenn die Schlüssel ein Kennwort haben. Dies erfordert sowohl den privaten als auch den öffentlichen Schlüssel. Sie MÜSSEN auch eine Namenskonvention für Seepferdchen befolgen. Die Standardeinstellung ist akzeptabel (id_rsa für privaten Schlüssel und id_rsa.pub für öffentlichen Schlüssel ... Eigentlich alles, was privatekeyname und privatekeyname.pub ist ).
Hinzufügen Ihres SSH-Schlüssels zu Seahorse zum automatischen Entsperren bei der Anmeldung; (Auf fedora25 bin ich mir nicht sicher, wo sich der Pfad auf anderen Distributionen befindet, obwohl er höchstwahrscheinlich sehr ähnlich ist.)
Für mich war es das
(seahorse geht automatisch davon aus, dass der öffentliche Schlüssel in meinem Fall id_rsa.pub war.)
Nachdem der Befehl ausgeführt wurde, öffnet seahorse ein kleines gtk-Passwortfeld, in das Sie das Passwort für den privaten Schlüssel eingeben können. oder lassen Sie es einfach leer, wenn Sie den Schlüssel ohne Passwort generiert haben.
Seahorse fordert Sie nicht auf, wenn alles in Ordnung ist. Sie müssen versuchen, ssh auf den Zielcomputer zu übertragen. Dann werden Sie von seahorse aufgefordert, den Schlüssel mit einem Kennwort grafisch zu entsperren (DAS PASSIERT NUR EINMAL), aber diesmal sollte es ein wenig anders aussehen ), und bieten Sie die OPTION an, den Schlüssel beim Anmelden zu entsperren. Aktivieren Sie diese Option, um Ihr Ziel zu erreichen.
Nur weil ich nicht alle Antworten gelesen habe, würde ich empfehlen, rückgängig zu machen, was alle Ihnen mit ssh-add gesagt haben, bevor Sie diese Antwort versuchen. Andernfalls kann es passieren, dass Ihren Schlüsseln etwas Schlimmes passiert, idk.
quelle
Hier ist das endgültige Drehbuch.
Aktualisieren Sie $ PASSW und kopieren Sie es in Ihr Terminal
quelle
Die beste Methode, die mir bekannt ist, ist die Verwendung eines PAM-Anmeldeskripts, das ich aus früheren Arbeiten übernommen habe, da ich in dieser Frage keine zufriedenstellende Antwort gefunden habe.
Ihre Passphrase wird verschlüsselt mit Ihrem Systemkennwort und einer umfangreichen Ableitungsfunktion gespeichert. Bei der Anmeldung wird Ihr Systemkennwort zum Entschlüsseln Ihrer Passphrase und zum Hinzufügen zum Agenten verwendet.
https://github.com/capocasa/systemd-user-pam-ssh
Der Vorteil gegenüber jeder anderen vorgestellten Lösung besteht darin, dass sie die Sicherheit kombiniert, die dem manuellen Ausführen von ssh-add beim Booten ohne Aufwand entspricht. Es sind keine zusätzlichen Tools erforderlich und eine zusätzliche Abhängigkeit ist auf den meisten Systemen (OpenSSL) bereits standardmäßig installiert.
quelle
Mein Setup unter macOS ist wie folgt (in
.zshrc
oder.bash_profile
für Bash-Leute):Das
|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]
Teil ist unter macOS erforderlich, da der Standardwert ist/private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners
. Andernfalls schlägt die umfassende Antwort von @Thomas Nyman fehl, da$SSH_AUTH_SOCK
immer etwas eingestellt ist.Dann in
.zlogout
(oder.bash_logout
für bash Leute):Getestet unter macOS Mojave 10.14.5
quelle