Der SSH-Agent verliert beim Neustart des Computers seine Identität

12

Nach dem Erstellen von Schlüsseln mit Namen id_rsaam Standardspeicherort. Ich füge dem SSH-Agenten mit dem Befehl Identität ssh-add ~/.ssh/id_rsahinzu. Es wird erfolgreich hinzugefügt.

Ich kann SSH ohne Eingabe der Passphrase des Schlüssels durchführen, da dies bereits bei SSH Agent der Fall ist.

Aber , wenn ich neu starten Maschine oder Server und dann prüfen , für Identität mit dem Befehl ssh-add -LI Nachricht bin immer wie The agent has no identities.

Bedeutet das, dass der Agent beim Neustart des Computers die Identität verloren hat? Ist das normal oder fehlt mir hier etwas?

Bitte leiten Sie mich, ich bin mit SSH nicht sehr vertraut.

Niks
quelle
Siehe diesen Thread auf der Unix- und Linux-Site.
Janosdivenyi

Antworten:

12

Es ist normal. Der Zweck eines Schlüsselagenten besteht nur darin, entschlüsselte Schlüssel im Speicher zu halten , sie werden jedoch niemals auf die Festplatte geschrieben. (Das würde den Zweck zunichte machen - warum nicht stattdessen einfach den Hauptschlüssel aufheben?)

Daher müssen die Schlüssel bei jedem Login entsperrt werden, und Sie müssen dies automatisieren - unter Linux ist die Verwendung pam_ssheine Option. Es verwendet automatisch Ihr Betriebssystemkennwort , um den Agenten zu entsperren. Ein anderes ähnliches Modul ist pam_envoy, das afaik etwas zuverlässiger ist (aber systemd erfordert).

Beide Module starten den Agenten selbst und laden die Schlüssel automatisch.

user1686
quelle
Irgendeine Idee, wie man auf einem Mac OSX Terminal automatisiert?
Niks
Wenn ich den Befehl ausgeführt $SSH_AUTH_SOCK habe, -bash: /tmp/ssh-gT43vE99vk/agent.511erhalte ich das Ergebnis :: Erlaubnis verweigert Ich bin hier verwirrt. Ob meine Agentenweiterleitung funktioniert oder nicht. Können Sie bitte einen Leitfaden erstellen?
Niks
Es soll nicht als Befehl verwendet werden - es ist eine Variable , die Sie als Teil eines anderen Befehls verwenden. Zum Beispiel echo $SSH_AUTH_SOCK, um seinen Wert zu drucken.
user1686
Hey Kumpel .. irgendeine Idee? stackoverflow.com/questions/31916395/…
Niks
2

Versuchen Sie dies zu Ihrem ~ / .bashrc :

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

Dies sollte erst nach der Anmeldung zur Eingabe des Kennworts auffordern.

Shiro
quelle
Vielen Dank für die Antwort. Das bedeutet, dass der SSH-Agent ordnungsgemäß funktioniert. Und nach dem Hinzufügen muss nicht jedes Mal beim Starten der Maschine eine Identität hinzugefügt werden? Entschuldigung, wenn dies eine dumme Frage ist, aber ich bin sehr neu bei ssh.
Niks
Wenn Ihr SSH-Schlüssel ein Kennwort hat, werden Sie bei jeder Anmeldung dazu aufgefordert.
Shiro
Diese Antwort ist schädlich . Wenn Sie das tun, was darin steht, wird Ihr privater Schlüssel gelöscht . Wenn Sie keine andere Möglichkeit zur Authentifizierung haben, verlieren Sie den Zugriff auf Systeme, auf denen Sie die Authentifizierung mit öffentlichem Schlüssel verwendet haben.
Kasperd
2

Unter OS X verfügt ssh-add über ein spezielles Flag, mit dem eine Verbindung zum Schlüsselbund hergestellt werden kann, wenn Sie Ihren privaten Schlüssel dort speichern möchten.

Lauf einfach ssh-add -K ~/.ssh/id_rsa.

Ich glaube, dies beantwortet Ihre Frage vollständiger. Dieses OS X-spezifische Flag ist schwer zu finden, funktioniert jedoch seit mindestens OS X Leopard.

Olivier Lacan
quelle
2
Dies ist die richtige Antwort, gefolgt von einem, ssh-add -Ader alle Schlüssel im Schlüsselbund hinzufügt. Erstellen Sie außerdem ein ~/.ssh/configund fügen Sie UseKeychain yeses hinzu, damit macOS Ihren Schlüssel immer beibehält
lucasarruda
Mein MacBook vergisst beim Neustart immer noch meine Identität, auch nachdem ich dies versucht habe.
Dominic Sayers
0

Diese Lösung ist praktisch, wenn Ihre SSH-Schlüssel durch Passphrasen geschützt sind.

Das Problem bei allen oben genannten Antworten besteht darin, dass Sie, wenn Ihr privater Schlüssel durch eine Passphrase geschützt ist, jedes Mal, wenn Sie ein neues Terminal starten und versuchen, den privaten Schlüssel zu verwenden, die Passphrase eingeben müssen und am Ende mehrere Kopien des ssh-agentIn ausführen Erinnerung. Die Lösung besteht darin, Folgendes in Ihr ~/.bashrcoder hinzuzufügen ~/.zshrc:

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

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
##### END Fix for ssh-agent #####

Dies fragt nur einmal nach der Passphrase Ihrer privaten ssh-Schlüssel, wenn Sie ein Terminal starten. Beim anschließenden Öffnen neuer Terminalsitzungen (oder tmux-Versionen) wird der vom obigen Snippet erstellte ssh-Agent wiederverwendet.

Referenz

GMaster
quelle