Wie kann ich ssh-add automatisch ohne Passwortabfrage ausführen?

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

Ich weiß, dass es eine Möglichkeit gibt, der bash_profile -Datei einige Zeilen hinzuzufügen, aber ich muss trotzdem jedes Kennwort eingeben Mal, wenn ich neu starte / mich bei einem bestimmten Computer anmelde.

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

Kommentare

Antwort

Dies ist ein typisches Beispiel für einen Kompromiss zwischen Sicherheit und Bequemlichkeit. 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 Passphrase, nein ssh-agent

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

ssh-Schlüssel mit Passphrase, mit ssh-agent

Wenn Sie ~/.bash_profile Folgendes hinzufügen, wird automatisch ssh-agent und laden Sie die SSH-Schlüssel beim Anmelden:

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

Jetzt muss die Passphrase bei jedem eingegeben werden Anmeldung. Aus Sicht der Benutzerfreundlichkeit ist dies zwar etwas besser, hat jedoch den Nachteil, dass ssh-agent zur Eingabe der Passphrase auffordert, unabhängig davon, ob der Schlüssel während der Anmeldesitzung verwendet werden soll oder nicht. Jedes neue Login erzeugt auch eine eigene ssh-agent -Instanz, die auch nach dem Abmelden mit den hinzugefügten Schlüsseln im Speicher ausgeführt wird, sofern dies nicht explizit beendet wird „e880c8eccc“>

Fügen Sie beim Abmelden Folgendes zu~/.bash_logout

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

oder dem folgenden hinzu ~/.bash_profile

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

Das Erstellen mehrerer ssh-agent -Instanzen kann durch vermieden werden Erstellen eines dauerhaften Kommunikationssockets für den Agenten an einem festen Ort im Dateisystem, z. B. in der Antwort von Collin Anderson . Dies ist eine Verbesserung gegenüber dem Laichen mehrerer Agenten Instanzen verbleiben jedoch, sofern nicht explizit getötet, der entschlüsselte Schlüssel nach dem Abmelden weiterhin im Speicher.

Auf Desktops sind SSH-Agenten in der Desktop-Umgebung enthalten, z. B. Gnome Keyring SSH Agent kann ein besserer Ansatz sein, da sie normalerweise dazu gebracht werden können, nach dem Pass zu fragen Phrase das erste Mal, wenn der SSH-Schlüssel während einer Anmeldesitzung verwendet wird, und speichern Sie den entschlüsselten privaten Schlüssel bis zum Ende der Sitzung im Speicher.

ssh- Schlüssel mit Passphrase, mit ssh-ident

ssh-ident ist ein Dienstprogramm, das ssh-agent in Ihrem Namen verwalten und Identitäten nach Bedarf laden kann. Es werden Schlüssel nur einmal nach Bedarf hinzugefügt, unabhängig davon, wie viele Terminals, SSH- oder Anmeldesitzungen Zugriff auf eine ssh-agent erfordern. Es kann auch einen anderen Agenten und einen anderen Schlüsselsatz hinzufügen und verwenden, je nachdem, mit welchem Host eine Verbindung besteht oder von welchem Verzeichnis ssh aufgerufen wird. Dies ermöglicht das Isolieren von Schlüsseln bei Verwendung der Agentenweiterleitung mit verschiedenen Hosts. Sie können auch mehrere Konten auf Websites wie GitHub verwenden.

Um ssh-ident zu aktivieren, installieren Sie es und fügen Sie Ihrem :

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

ssh-Schlüssel mit Passphrase, mit keychain

keychain ist ein kleines Dienstprogramm, das ssh-agent in Ihrem Namen verwaltet und es ermöglicht, dass die ssh-agent nach Beendigung der Anmeldesitzung weiterhin ausgeführt wird. Bei nachfolgenden Anmeldungen stellt keychain eine Verbindung zur vorhandenen ssh-agent -Instanz her. In der Praxis bedeutet dies, dass die Passphrase nur bei der ersten Anmeldung nach einem Neustart eingegeben werden muss. Bei nachfolgenden Anmeldungen wird der unverschlüsselte Schlüssel aus 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 von keychain, installieren Sie es und fügen Sie ~/.bash_profile Folgendes hinzu:

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

Aus Sicherheitsgründen von Ansicht, ssh-ident und keychain sind schlechter als ssh-agent Instanzen, die auf die Lebensdauer einer bestimmten Person beschränkt sind Sitzung, aber sie bieten ein hohes Maß an Komfort. Um die Sicherheit von keychain zu verbessern, fügen einige Benutzer die Option --clear zu ihrem ~/.bash_profile -Schlüsselbund hinzu Aufruf. Auf diese Weise müssen Passphrasen bei der Anmeldung wie oben beschrieben erneut eingegeben werden, aber cron Jobs haben nach dem Abmelden des Benutzers weiterhin Zugriff auf die unverschlüsselten Schlüssel. Die Wiki-Seite keychain enthält weitere Informationen und Beispiele.

ssh-Schlüssel ohne Passphrase

Aus Sicherheitsgründen ist dies die schlechteste Option, da der private Schlüssel in diesem Fall völlig ungeschützt ist ist entblößt. Dies ist jedoch die einzige Möglichkeit, um sicherzustellen, dass die Passphrase nach einem Neustart nicht erneut eingegeben werden muss.

SSH-Schlüssel mit Passphrase, mit ssh-agent, Passphrase an ssh-add aus dem Skript

Während es möglich ist Es scheint eine einfache Idee zu sein, die Passphrase aus einem Skript an ssh-add zu übergeben, z echo "passphrase\n" | ssh-add, dies ist nicht so einfach, wie es scheint, als ssh-add liest das nicht Passphrase von stdin, öffnet jedoch /dev/tty direkt zum Lesen .

Dies kann hat mit expect , einem Tool zur Automatisierung interaktiver Funktionen, umgangen Anwendungen. Unten finden 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 Klartext in gespeichert ist Aus Sicherheitsgründen ist das Skript kaum besser als ein passwortloser SSH-Schlüssel. Wenn dieser Ansatz verwendet werden soll, ist es wichtig sicherzustellen, dass für das Skript expect, das die Passphrase enthält, die richtigen Berechtigungen festgelegt sind, sodass es nur mit dem Schlüssel lesbar, beschreibbar und ausführbar ist Besitzer.

Kommentare

  • Okay, aber wenn ich Ihren Code auf ~ / .bash_profile setze, muss ich jedes Mal, wenn ich mich anmelde, ein Passwort eingeben ‚ will das auch nicht. Ich mache mir überhaupt keine Sorgen um die Sicherheit. echo “ pass \ n “ | ssh-add funktioniert nicht ‚
  • @ user1607072 Ja, so funktioniert das ssh-agent -Schnipsel in ~/.bash_profile verhält sich wie in der Antwort erläutert. Vielleicht möchten Sie sich das Dienstprogramm keychain ansehen. Mit keychain müssen Sie das Kennwort bei der ersten Anmeldung nach dem Neustart eingeben. Bei nachfolgenden Anmeldungen stellt keychain eine Verbindung zu einer vorhandenen ssh-agent Instanz mit dem entschlüsselten Schlüssel im Speicher. Abgesehen davon gibt es ‚ die Option, einen SSH-Schlüssel ohne Passphrase zu generieren, aber dies wird natürlich nicht empfohlen.
  • @ user1607072 Obwohl ich stark würde Wenn Sie einen der sichereren Ansätze vorschlagen, gibt es eine Möglichkeit, die Passphrase aus einem Skript an ssh-add zu übergeben. Der Grund, warum echo "pass\n" | ssh-add nicht funktioniert, ist, dass ssh-add das Kennwort von stdin nicht liest. öffnet aber /dev/tty direkt zum Lesen. Die Antwort wurde mithilfe eines Dienstprogramms mit dem Namen expect aktualisiert, um eine Problemumgehung zu enthalten.
  • @ user1607072 Für Ihren Anwendungsfall ist dies möglicherweise etwas übertrieben, aber Kerberos in Kombination mit ssh GSSAPI kann auch für kennwortlose ssh-Anmeldungen verwendet werden. Die entsprechende Authentifizierungsmethode in ssh heißt gssapi-with-mic. Dies wird normalerweise in größeren Netzwerken verwendet, aber wenn Sie daran interessiert sind, lohnt es sich natürlich, einen Blick darauf zu werfen.
  • @ErickBrown: Bereits beantwortet hier . Die SSH-Agent-Einheit sollte beim Abmelden gestoppt werden, wenn der Benutzer im systemd-Anmeldemanager deaktiviert ist. Wenn das Verweilen des Benutzers aktiviert ist, werden die Benutzerinstanz systemd und die SSH-Agent-Einheit auch nach dem Schließen der letzten Anmeldesitzung weiter ausgeführt.

Antwort

Fügen Sie dies zu Ihrer ~/.bashrc hinzu und melden Sie sich ab und wieder in Kraft treten.

 if [ ! -S ~/.ssh/ssh_auth_sock ]; then eval `ssh-agent` ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock ssh-add -l > /dev/null || ssh-add  

Dies sollte nur zur Eingabe eines Kennworts auffordern Das erste Mal, dass Sie sich nach jedem Neustart anmelden. Es wird dieselbe ssh-agent so lange wiederverwenden, wie es ausgeführt wird.

Kommentare

  • sehr ordentlich Auf diese Weise wird nur ein SSH-Agent ausgeführt (: Mehrere Agenten wie in @thomasNyman ‚ Die zweite Lösung scheint mir ein Sicherheitsrisiko zu sein …
  • Nach Recherchen an verschiedenen Standorten und dem Lesen verschiedener Lösungen scheint diese hier die klarste zu sein, direkt auf den Punkt. Sehr schön. +1
  • besser, dies zu tun: `alias ssh = ssh-check-agent “ und lassen Sie die Check-Agent-Version wie folgt vorgehen: a) Sie erhalten nur einen Agenten und b) Sie erhalten den Agenten nur, wenn Sie ihn benötigen
  • Ich denke, -s ist die Standardeinstellung, daher tun wir ‚ dies bereits.
  • Beachten Sie, dass ssh-add ohne Argumente fügt ~/.ssh/id_rsa hinzu. Möglicherweise möchten Sie ssh-add Argumente übergeben, wenn sich Ihre privaten Schlüssel in einer anderen Datei befinden.

Antwort

Nicht eng mit der Frage des OP verbunden, aber möglicherweise für andere nützlich: Seit 7.2.0 verfügt ssh (1) über eine Option, mit der ssh-agent bei der ersten Authentifizierung einen Schlüssel hinzugefügt werden kann. Die Option lautet AddKeysToAgent und kann auf yes, no, ask oder confirm, systemweit oder in Ihrer persönlichen .ssh/config -Datei.

Referenz : https://www.openssh.com/txt/release-7.2

Kommentare

  • Gilt für diejenigen, die neu in der Datei .ssh/config sind: Dies gilt für ssh und alles, was dahinter, zum Beispiel scp, und kann auf Hostbasis durchgeführt werden.
  • Es fragt mich immer noch nach dem Passwort Jedes Mal, wenn ich mich anmelde und versuche, zum Beispiel zu ziehen.
  • @trainosis Das Problem ist, dass wahrscheinlich keine ssh-agent-Instanz ausgeführt wird, um die entschlüsselten Schlüssel für die zukünftige Verwendung im Speicher zu halten. Sie sollten das Kennwort für einen bestimmten Schlüssel nur einmal pro Anmeldesitzung eingeben müssen, wenn Sie ssh-agent verwenden.

Antwort

ssh-agent speichert verschiedene entsperrte SSH-Schlüssel zwischen, sodass Sie SSH-Schlüssel durch Kennwörter schützen können, ohne sie jedoch jedes Mal eingeben zu müssen.

Um entsperrte Schlüssel zwischenzuspeichern, müssen diese Schlüssel offensichtlich entsperrt werden. Zum Entsperren von Schlüsseln, die mit einer Passphrase gesperrt sind, müssen diese Passphrasen offensichtlich bekannt sein.

Jede Methode, für die keine Autorisierung durch einen Menschen erforderlich ist (z. B. „Eingeben eines Passworts“), führt nicht nur zu Ihrer System unsicher; Dadurch wird auch der gesamte Zweck des SSH-Agenten bedeutungslos.

Nachdem Sie dies alles gesagt haben, können Sie einfach SSH-Schlüssel verwenden, die nicht durch ein Passwort geschützt sind (drücken Sie Enter , wenn Sie dazu aufgefordert werden für ein Passwort während der Schlüsselgenerierung). Da es kein Passwort gibt, muss ssh-agent Sie nicht nach einem fragen, um es (nicht) zwischenzuspeichern.

Kommentare

  • Ich stimme zu, solange Ihre Schlüssel ordnungsgemäß nur vom Benutzer autorisiert sind, hat ssh-agent wenig Vorteil gegenüber berechtigungslosen Schlüsseln. Ich möchte in einen Anmeldeserver ssh, und dann hat dieser Server eine Reihe von permssionslosen Schlüsseln, von denen jeder nur zum Entsperren eines anderen Servers verwendet werden kann. Der Anmeldeserver tut nichts anderes, daher ist es ‚ viel schwieriger zu hacken / fälschen usw. Die anderen Server haben keinen Kennwortzugriff und sind nur Schlüssel.

Antwort

Hier ist eine Problemumgehung zur Automatisierung Ihrer SSH-Passphrase.

  1. Erstellen Sie ein einzeiliges Skript, das Ihre Passphrase in die Standardausgabe druckt, z. B.:

     echo "echo MY_SSH_PASSWORD" > ~/.print_ssh_password && chmod 700 ~/.print_ssh_password 

    Wichtig: Stellen Sie sicher Sie kopieren den führenden Bereich nach und verhindern, dass Ihr Kennwort in Ihrem Verlauf gespeichert wird .

Verwenden Sie eine der folgenden Methoden.

  • Verwenden Sie einen Standardeingabeansatz:

    cat ~/.ssh/id_rsa | SSH_ASKPASS=~/.print_ssh_password ssh-add - 
  • oder Named Pipe -Ansatz:

    1. Erstellen Sie eine Named Pipe (Sie können auch eine -Prozessersetzung versuchen):

      mkfifo --mode 0600 ~/.ssh_fifo 
    2. Führen Sie ssh-add durch Angabe des für die Authentifizierung verwendeten Programms:

      cat ~/.ssh/id_rsa >~/.ssh_fifo | SSH_ASKPASS=~/.print_ssh_password ssh-add ~/.ssh_fifo 

    Siehe: man ssh-add , um mehr über SSH_ASKPASS zu erfahren.

Kommentare

  • Die echo my_passphrase ist eine große Sicherheitslücke. Nachdem Sie es eingegeben haben, befindet sich das Kennwort im Klartext in der Verlaufsdatei der von Ihnen verwendeten Shell. Und zweite Befehlszeilenargumente sind unter Unix weltweit lesbar (ps -ef). Fügen Sie niemals Kennwörter in Befehlszeilenargumente ein!
  • @ceving Das Hinzufügen von zusätzlichem führenden Leerzeichen löst das Problem mit der Verlaufsdatei. Zusätzliche Informationen hinzugefügt.
  • @kenorb: ‚ löst das größere Problem des in ps sichtbaren Passworts nicht Ausgabe. Die Verlaufsdatei ist normalerweise ohnehin nur für den Benutzer lesbar, die Befehlszeilen sind jedoch für alle Benutzer auf einem System lesbar.

Antwort

Ich empfehle Ihnen beim Anmelden nicht, ssh-add (das einen ssh-agent öffnen muss). 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 stattdessen, ein Skript zu schreiben, das die Unter-Shell eines SSH-Agenten öffnet, wobei alle Schlüsseldateien automatisch hinzugefügt werden und wann aufgerufen wird erforderlich, um ssh zu verwenden. Wenn Sie dies übernehmen könnten, lesen Sie weiter.

Sie haben zwei Möglichkeiten:

  1. Entfernen Sie alle Passphrasen für Ihre Schlüssel, die schwache Sicherheit wenn Ihre Schlüsseldateien gestohlen werden (daher nicht empfohlen )

  2. Verwenden Sie dieselbe Passphrase für Ihre Schlüssel. Wenn Sie dann ssh-add keyfile1 keyfile2 ... verwenden, müssen Sie die Passphrase nur einmal pro Abschnitt eingeben.

    li>

In beiden Fällen können Sie die folgende Skriptdatei „ssh_keys_section.sh“ wie folgt schreiben:

#!/bin/bash # This script run a ssh-agent on a sub-shell and automatically ssh-add all keyfiles at once. # This agent ends when you type `exit` to close the sub-shell. exec ssh-agent bash -c "ssh-add /path/to/keyfile1 /path/to/keyfile2 ...; exec bash" 

Anmerkungen:

  • Befehl zum Ändern oder Löschen der Passphrase: ssh-keygen -p -f keyfile
  • Innerhalb der Sub-Shell können Sie sogar mehr Terminals teilen, die dieselbe verwenden Entsperrte Schlüssel, indem Sie möglicherweise einen Befehl wie /path/to/yourterminal & (abhängig vom Betriebssystem) verwenden.

Kommentare

  • ZB Unter Windows in Cygwin ist /path/to/yourterminal & == > mintty &
  • Anmerkung: Schließen Sie die Sitzung nach der Verwendung mit ctrl-d oder exit, genau wie Sie eine verschachtelte bash Shell und müssen geschlossen werden.

Antwort

if [ ! -S ${HOME}/.ssh/ssh_auth_sock ]; then eval $(ssh-agent) ln -sf "${SSH_AUTH_SOCK}" ${HOME}/.ssh/ssh_auth_sock fi export SSH_AUTH_SOCK=${HOME}/.ssh/ssh_auth_sock ssh_keys=$(find -E ~/.ssh -type f -regex ".*(rsa$|pem)") ssh_agent_keys=$(ssh-add -l | awk "{key=NF-1; print $key}") for k in "${ssh_keys}"; do for l in "${ssh_agent_keys}"; do if [[ ! "${k}" = "${l}" ]]; then ssh-add "${k}" > /dev/null 2>&1 fi done done 

Antwort

Ich habe das von Steampowered erwähnte Skript verwendet. Ich habe jetzt das folgende Skript erstellt, da es keine Dateien hinterlässt herumliegen.

Nur an der zsh Shell arbeiten.

#!/usr/bin/env zsh AGENT_BIN=`which ssh-agent` AGENT_ADD_BIN=`which ssh-add` AGENT_PID=`ps -fe | grep ${AGENT_BIN} | awk -vuser=$USER -vcmd="$AGENT_BIN" "$1==user && $8==cmd{print $2;exit;}"` if [ -z "$AGENT_BIN" ]; then echo "no ssh agent found!"; return fi if [ "" -eq "$AGENT_PID" ]; then if read -sq "YN?Do you want to unlock your ssh keys?"; then echo "" output=`$AGENT_BIN | sed "s/echo/#echo/g"` eval $output $AGENT_ADD_BIN fi else for f in "/proc/"* do cmdline=`cat "$f/cmdline"` if [ "${AGENT_BIN}" -ef "${cmdline}" ]; then export SSH_AUTH_SOCK=`cat $f/net/unix | grep --binary-file=text -oP "((/[^/]*?)+/ssh-[^/]+/agent\.\d+$)"` export SSH_AGENT_PID=${f##*/} break; fi done fi 

Kommentare

  • “ Arbeiten an Nur zsh-Shell „, okay, aber warum gibt Ihre Shebang-Zeile an, dass nur “ sh „?

Antwort

SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed "s/^echo/#echo/" > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null #ps ${SSH_AGENT_PID} doesn"t work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi 

Hier Kredit geben: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html

Diese Lösung wird auch hier empfohlen: http://mah.everybody.org/docs/ssh

Antwort

Wenn Sie Seepferdchen als Passwortmanager ausführen … was Sie wahrscheinlich sind; D

Eine andere Lösung, die das gesuchte Ziel erreicht, besteht darin, Seahorse einfach die SSH-Schlüssel für die automatische Entsperrung beim Anmelden hinzuzufügen . Der Hauptvorteil dabei ist, dass Sie nach der Anmeldung über gdm oder mit was auch immer Sie sich anmelden, niemals ein Passwort für die Schlüssel eingeben müssen, selbst wenn die Schlüssel ein Passwort haben. Dies erfordert sowohl den privaten als auch den öffentlichen Schlüssel. Sie MÜSSEN auch einer Namenskonvention für Seepferdchen folgen. Der Standardwert ist akzeptabel (id_rsa für privaten Schlüssel und id_rsa.pub für öffentlichen Schlüssel … Wirklich alles, was privatekeyname und privatekeyname.pub ist)

Um Ihren SSH-Schlüssel zum Seepferdchen hinzuzufügen und ihn beim Anmelden automatisch zu entsperren; (Auf fedora25 bin ich mir nicht sicher, wo sich der Pfad in anderen Distributionen befindet, obwohl er höchstwahrscheinlich sehr ähnlich ist.)

/lib64/seahorse/seahorse-ssh-askpass /path/to/keys/here 

Für mich war es

/lib64/seahorse/seahorse-ssh-askpass ~/.ssh/id_rsa 

(Seepferdchen nimmt automatisch an, dass der öffentliche Schlüssel in meinem Fall id_rsa.pub war)

Nach Ausführung des Befehls öffnet Seepferdchen a süßes 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, in den Zielcomputer zu ssh.Dann werden Sie von Seahorse aufgefordert, den Schlüssel mit einem Passwort grafisch freizuschalten (DAS PASSIERT NUR EINMAL), aber diesmal sollte es etwas anders aussehen; P (dies ist auch der Teil, in dem Seepferdchen Seepferdchen macht, um ssh-add Magie zu machen, glaube ich ) und bieten Sie die OPTION an, um den Schlüssel beim Anmelden zu entsperren. Aktivieren Sie diese Option Erreichen Sie Ihr Ziel.

Nur weil ich nicht alle Antworten gelesen habe, würde ich empfehlen, das, was Ihnen alle gesagt haben, mit ssh-add rückgängig zu machen, bevor Sie diese Antwort versuchen. Andernfalls kann etwas Schlimmes passieren zu Ihren Schlüsseln, idk.

Antwort

Single Sign-On-Lösung für SSH könnte mich zu pam_ssh .

Laut dieses Artikels , Das Konzept lautet:

Wenn Sie über ssh mit mehreren * nix-basierten Maschinen arbeiten, haben Sie wahrscheinlich die Nachteile satt Sie müssen Ihr Passwort jedes Mal eingeben, wenn Sie auf eine andere Box zugreifen möchten. Es gibt eine sichere Möglichkeit, auf jeden Computer zuzugreifen, auf den Sie SSH-Zugriff haben, ohne ein anderes Kennwort eingeben zu müssen (außer dem, mit dem Sie sich ursprünglich angemeldet haben).


Dies ist eigentlich ganz einfach. Sie erstellen im Grunde nur ein öffentliches / privates Schlüsselpaar, um sich bei Ihren anderen Computern zu authentifizieren PAM erzeugt einen Agenten, der Ihre Schlüssel nach der Anmeldung lädt und eine Single Signon-Lösung für den Zugriff auf alle Ihre Remotecomputer bietet. Diese Anleitung führt Sie durch die Einrichtung.

Ich habe nicht überprüft, ob dies tatsächlich funktionieren würde.

Antwort

Fügen Sie dies Ihrer ~/.bashrc -Datei hinzu:

ssh-add -L|grep identities > /dev/null && ssh-add /path/to/ssh/private/key 

Kommentare

  • Ich ‚ sehe nicht, wie dies mit der Frage zusammenhängt, bei der es darum geht, nicht zur Eingabe des Kennworts aufgefordert zu werden bei nachfolgenden Anmeldungen.

Antwort

Um einen (möglicherweise kennwortlosen) Schlüssel hinzuzufügen und sicherzustellen, dass ssh-add fordert nicht zur Eingabe eines Kennworts auf, egal was passiert, selbst wenn es unter X ausgeführt wird:

DISPLAY= ssh-add -k /path/to/key </dev/null &>/dev/null 

Der Beendigungsstatus zeigt Erfolg oder Misserfolg an.

Antwort

Hier ist die endgültige Skript.

Aktualisieren Sie $ PASSW und fügen Sie es in Ihr Terminal ein.

# <sshpass> via typinator # Updated: 2017-01-18_21h36 # # apt-get update -y; apt-get install expect -qy # Pass this value to ssh-add PASSW="myfancypass123" # Define a name for this script THIS_SCRIPT="$(date +%Y-%m-%d_%H-%M-%S-%N)".sh # Create a fresh directory to work from / Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la # Output our bash script file - BEGIN cat <<< " #!/bin/bash set -u # Stop if an unbound variable is referenced set -e # Stop on first error export HISTIGNORE="expect*"; # Normal CMDs echo && echo "The process should take about 10 seconds:" && echo eval "$(ssh-agent -s)"; sleep 0.5; # Define VAR passed when this bash-script was launched password="$@" # Launch the expect magic expect -c " spawn ssh-add /root/.ssh/id_rsa expect "?assword:" send \"$password\r\" expect "?password:" send \"$password\r\" expect eof" export HISTIGNORE=""; export password=""; " > $THIS_SCRIPT # Output our bash script file - END # Ensure we are in the right path cd ~/temp; ls -la; sleep 1; # Run the bash script chmod +x ./$THIS_SCRIPT; ./$THIS_SCRIPT "$PASSW"; unset password; # Clean up rm -rf ~/temp; mkdir -p ~/temp; cd ~/temp; ls -la 

Antwort

Mir ist am besten bekannt, ein PAM-Anmeldeskript zu verwenden, das ich aus früheren Arbeiten angepasst habe, weil ich in dieser Frage keine zufriedenstellende Antwort finden konnte.

Ihre Passphrase wird angezeigt verschlüsselt mit Ihrem Systemkennwort und einer umfangreichen Ableitungsfunktion gespeichert. Bei der Anmeldung wird Ihr Systemkennwort verwendet, um Ihre Passphrase zu entschlüsseln und dem Agenten hinzuzufügen.

https://github.com/capocasa/systemd-user-pam-ssh

Der Vorteil gegenüber jeder anderen vorgestellten Lösung besteht darin, dass die Sicherheit der manuellen Ausführung von ssh-add beim Booten ohne großen Aufwand kombiniert wird Keine zusätzlichen Tools und eine zusätzliche Abhängigkeit, die auf den meisten Systemen (OpenSSL) bereits standardmäßig installiert ist.

Antwort

My Das Setup unter macOS ist wie folgt (in .zshrc oder .bash_profile für Bash-Leute):

Der Teil || [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]] ist unter macOS erforderlich, da der Standardwert /private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners ist. Andernfalls schlägt die umfassende Antwort von @Thomas Nyman fehl, weil $SSH_AUTH_SOCK immer auf etwas gesetzt ist.

Dann in .zlogout (oder .bash_logout für Bash-Leute):

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

Getestet unter macOS Mojave 10.14.5

Antwort

Dies wurde von GitHub unter erklärt. Automatischer Start von ssh-agent unter Git für Windows , was wiederum auch für Linux funktioniert.

Sie können ssh-agent automatisch ausführen, wenn Sie die Bash- oder Git-Shell öffnen. Kopieren Sie die folgenden Zeilen und fügen Sie sie in Ihre ~/.profile oder ~/.bashrc -Datei in der Git-Shell ein:

 env=~/.ssh/agent.env agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; } agent_start () { (umask 077; ssh-agent >| "$env") . "$env" >| /dev/null ; } agent_load_env # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?) if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then agent_start ssh-add elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then ssh-add fi unset env  

Wenn Ihr privater Schlüssel nicht an einem der Standardspeicherorte gespeichert ist (wie ~/.ssh/id_rsa) müssen Sie Ihrem SSH-Authentifizierungsagenten mitteilen, wo er zu finden ist. Geben Sie ssh-add ~/path/to/my_key.

Tipp: Wenn ssh-agent Ihren Schlüssel nach einiger Zeit vergessen soll, können Sie dies tun Konfigurieren Sie dies, indem Sie ssh-add -t <seconds> ausführen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.