it-swarm.com.de

Was ist der Zweck von SSH-Agent?

Ich habe die offizielle Definition gelesen:

ssh-agent ist ein Programm zum Speichern privater Schlüssel für die Authentifizierung mit öffentlichen Schlüsseln (RSA, DSA, ECDSA). Die Idee ist, dass ssh-agent zu Beginn einer X-Sitzung oder einer Anmeldesitzung gestartet wird und alle anderen Fenster oder Programme als Clients für das ssh-agent-Programm gestartet werden. Durch die Verwendung von Umgebungsvariablen kann der Agent gefunden und automatisch zur Authentifizierung verwendet werden, wenn er sich mit ssh (1) bei anderen Computern anmeldet.

".. ein Programm zum Speichern privater Schlüssel .." - IMHO - ssh-Schlüssel werden vom Benutzer mit dem Befehl ssh-keygen generiert und einfach und unkompliziert in ~/.ssh gespeichert - warum brauche ich einen Daemon dazu? diese Schlüssel halten? Wie genau hält es sie überhaupt - sind sie nicht nur in .ssh gespeichert?

"werden als Clients für das ssh-agent-Programm gestartet" - Ich verstehe es nicht. Wo würde man das brauchen? Ich benutze normalerweise nur ssh wie folgt:

 ssh -i ~/.ssh/private_key_name [email protected]

Was genau bedeutet manuell unter "Kunden" - welche Kunden? Führen Sie nicht einfach den Befehl ssh vom Terminal aus, um eine Verbindung herzustellen - welche anderen Clients gibt es und warum können sie nicht einfach einen Pfad zu dieser privaten ssh-Datei verwenden, genau wie der Befehl ssh?

77
agent_smith

Der SSH-Agent übernimmt das Signieren von Authentifizierungsdaten für Sie. Bei der Authentifizierung bei einem Server müssen Sie einige Daten mit Ihrem privaten Schlüssel signieren, um zu beweisen, dass Sie es sind.

Aus Sicherheitsgründen schützen die meisten Personen ihre privaten Schlüssel sinnvoll mit einer Passphrase. Bei jedem Authentifizierungsversuch müssen Sie diese Passphrase eingeben. Dies kann unerwünscht sein, sodass der SSH-Agent den Schlüssel für Sie zwischenspeichert und Sie das Kennwort nur einmal eingeben müssen, wenn der Agent es entschlüsseln möchte (und oft nicht einmal das, da der SSH-Agent in pam integriert werden kann). was viele Distributionen tun).

Der SSH-Agent übergibt diese Schlüssel niemals an Client-Programme, sondern präsentiert lediglich einen Socket, über den Clients Daten senden können und über den er mit signierten Daten antwortet. Ein Nebeneffekt davon ist, dass Sie Ihren privaten Schlüssel auch mit Programmen verwenden können, denen Sie nicht vollständig vertrauen.

Ein weiterer Vorteil des SSH-Agenten besteht darin, dass er über SSH weitergeleitet werden kann. Wenn Sie also ssh an Host A senden, während Sie Ihren Agenten weiterleiten, können Sie ssh von A an einen anderen Host B ssh, ohne dass Ihr Schlüssel (nicht einmal in verschlüsselter Form) auf Host A vorhanden sein muss.

84

Der Nutzen für ssh-agent ist, dass Sie Ihre Passphrase nur einmal eingeben müssen. Wenn Ihr privater RSA-Schlüssel nicht mit einer Passphrase verschlüsselt ist, ist ssh-agent nicht erforderlich. Der Befehl ssh wäre ein Beispiel für einen Client.

16
jordanm

Wenn Sie routinemäßig ssh in eine Vielzahl verschiedener Maschinen mit jeweils eigenem Schlüssel und eigener Passphrase einsteigen, führen Sie ssh-agent ermöglicht es Ihnen, die Passphrase für jeden Schlüssel einmal einzugeben1 Zu Beginn Ihrer Sitzung können Sie sich dann so oft bei jedem Computer authentifizieren, wie Sie möchten, ohne Ihre Passphrase erneut eingeben zu müssen.

Ein weiterer Vorteil ist, dass der Agent gemäß der Seite man niemals einen privaten Schlüssel über seinen Anforderungskanal sendet. Wenn Sie also zwischen verschiedenen Boxen wechseln, sind Ihre privaten Schlüssel geschützt.

1Sie können die life Zeit festlegen, zu der die Schlüssel im Agenten gehalten werden.

7
jasonwryan

Wikipedia-Artikel hat wahrscheinlich die beste Beschreibung:

Die Überprüfung des Servers basiert auf der Challenge-Response-Authentifizierung. ssh stellt mit einem Benutzernamen und der Anforderung eines Schlüssels eine Verbindung zum Server her. Der ssh-Daemon erhält die Anforderung und sendet eine Herausforderung basierend auf dem in der Authentifizierungsdatei gespeicherten öffentlichen Schlüssel zurück. ssh verwendet den privaten Schlüssel, um eine Schlüsselantwort zu erstellen, und sendet sie an den wartenden sshd am anderen Ende der Verbindung. Der private Schlüssel selbst wird nicht gesendet. Der ssh-Daemon überprüft die Schlüsselantwort und gewährt, falls gültig, Zugriff auf das System. ssh-agent vereinfacht dies, indem ein Socket erstellt wird, der auf SSH-Verbindungen wartet. Der Benutzer startet einfach ssh-agent und teilt ihm mit, wie er seine Schlüssel finden soll (wenn sie sich nicht am Standardspeicherort befinden), gibt die Passphrase für jeden zu verwendenden Schlüssel einmalig ein und dann behandelt ssh-agent die Pause jedes Mal, wenn der Benutzer eine Verbindung zu einem Remote-Server herstellt.

Wieder wörtlich aus dem Wikipedia-Artikel:

... ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von ssh. Jeder, der eine Verbindung zu diesem Socket herstellen kann, hat auch Zugriff auf den SSH-Agenten. Die Berechtigungen werden wie in einem normalen Linux- oder Unix-System festgelegt. Wenn der Agent gestartet wird, erstellt er ein neues Verzeichnis in/tmp mit restriktiven Berechtigungen. Der Socket befindet sich im Ordner.

Es wird normalerweise entweder in System- oder Benutzer-RC-Dateien wie $HOME/.bashrc oder $HOME/.profile (für Bash-Shells), damit die Umgebungsvariablen ssh-agent set wird vollständig in Ihre Umgebung integriert.

Auf meinem Fedora 14-System startet es ziemlich früh als Teil des X11-Subsystems. In dieser Datei /etc/X11/xinit/xinitrc-common:

# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
    if [ "x$TMPDIR" != "x" ]; then
        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
    else
        SSH_AGENT="/usr/bin/ssh-agent"
  fi
fi

Die Variable $SSH_AGENT wird dann in anderen X11-Startskripten wie hier verwendet, /etc/X11/xinit/Xclients:

exec -l $Shell -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"

Wenn Sie es hier einfügen, werden die folgenden Umgebungsvariablen als Teil einer übergeordneten Shell festgelegt. Daher sollten alle gegabelten untergeordneten Variablen sie beispielsweise haben:

SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;

Das ist etwas komplexer, aber kurz gesagt, das ist im Grunde das, was mit ssh-agent.

Zum Beispiel in GNOME ssh-agent wird tatsächlich pro Benutzer als Startanwendung gestartet:

ss of startup apps

TL; DR

Endeffekt, ssh-agent existiert, sodass Sie Ihre SSH-Schlüssel, wenn sie benötigt werden, nur einmal mit ihrer Passphrase entsperren müssen (vorausgesetzt, sie haben eine), und von da an sind sie in ihrer entschlüsselten Form im Speicher (RAM) verfügbar.

7
slm

"werden als Clients für das Programm ssh-agent gestartet" bezieht sich auf die Idee, dass ssh-agent während der (lokalen) Initialisierung der Anmeldesitzung gestartet wird, damit alle Programme die Umgebungsvariablen $SSH_AGENT_PID und $SSH_AUTH_SOCK erhalten. die für die Verbindung des Agenten erforderlich sind.

Ein weiterer Vorteil der Entfernung des privaten Schlüssels aus ssh besteht darin, dass ssh-agent durch gpg-agent ersetzt werden kann. Somit können Sie OpenPGP-Schlüssel (mit Authentifizierungsfunktion) für SSH verwenden. Das ist eine gute Lösung für OpenPGP-Schlüssel auf einer Smartcard.

1
Hauke Laging