SSH Agent: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
*Secure Shell (SSH) ist ein Protokoll, das eine sichere Remote-Anmeldung an einem Computer in einem Netzwerk mithilfe von Public-Key-Kryptografie ermöglicht.
+
[[Kategorie:SSH]]
*SSH-Client-Programme (wie ssh von OpenSSH) laufen normalerweise für die Dauer einer Remote-Login-Sitzung und sind so konfiguriert, dass sie in einer Datei im Home-Verzeichnis des Benutzers nach dem privaten Schlüssel des Benutzers suchen
+
*Für zusätzliche Sicherheit ist es üblich, den privaten Schlüssel in verschlüsselter Form zu speichern,
*Für zusätzliche Sicherheit (z. B. gegen einen Angreifer, der jede Datei im lokalen Dateisystem lesen kann) ist es üblich, den privaten Schlüssel in verschlüsselter Form zu speichern, wobei der Verschlüsselungsschlüssel aus einer Passphrase berechnet wird, die der Benutzer gespeichert hat.
+
*Zum Entschlüsseln wird eine Passphrase genutzt.
 
*Da die Eingabe der Passphrase mühsam sein kann, möchten viele Benutzer sie nur einmal pro lokaler Anmeldesitzung eingeben.
 
*Da die Eingabe der Passphrase mühsam sein kann, möchten viele Benutzer sie nur einmal pro lokaler Anmeldesitzung eingeben.
*Der sicherste Ort zum Speichern des unverschlüsselten Schlüssels ist der Programmspeicher, und in Unix-ähnlichen Betriebssystemen ist der Speicher normalerweise mit einem Prozess verbunden.
+
*Der sicherste Ort zum Speichern des unverschlüsselten Schlüssels ist der Programmspeicher
*Ein normaler SSH-Client-Prozess kann nicht zum Speichern des unverschlüsselten Schlüssels verwendet werden, da SSH-Client-Prozesse nur die Dauer einer Remote-Anmeldesitzung dauern.  
+
*In Unix-ähnlichen Betriebssystemen ist der Speicher normalerweise mit einem Prozess verbunden.
*Daher führen Benutzer ein Programm namens ssh-agent aus, das über die Dauer einer lokalen Anmeldesitzung hinaus läuft, unverschlüsselte Schlüssel im Speicher speichert und mit SSH-Clients über einen Unix-Domain-Socket kommuniziert.
+
*Die SSH-Client-Prozesse dauern nur so lange wie die Remote-Anmeldesitzung.  
*ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von ssh.
+
*Daher führen Benutzer ein Programm namens ssh-agent aus, das über die Dauer einer lokalen Anmeldesitzung hinaus läuft.
*Jeder, der sich mit diesem Socket verbinden kann, hat auch Zugriff auf den ssh-agenten.
+
*Dieses speichert unverschlüsselte Schlüssel im Speicher und kommuniziert mit SSH-Clients über einen Unix-Domain-Socket.
*Die Berechtigungen werden wie in einem üblichen Linux- oder Unix-System gesetzt.  
+
*ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von SSH.
 
*Wenn der Agent startet, erstellt er ein neues Verzeichnis in /tmp mit restriktiven Berechtigungen.
 
*Wenn der Agent startet, erstellt er ein neues Verzeichnis in /tmp mit restriktiven Berechtigungen.
 
*Der Socket befindet sich in diesem Verzeichnis.
 
*Der Socket befindet sich in diesem Verzeichnis.
*Es gibt ein Verfahren, das Malware daran hindern kann, den ssh-agent-Socket zu verwenden.  
+
{{#drawio:ssh-agent1-1}}
*Wenn die Option ssh-add -c beim Importieren der Schlüssel in den ssh-agenten gesetzt ist, fordert der Agent mit dem durch die Umgebungsvariable SSH_ASKPASS angegebenen Programm eine Bestätigung vom Benutzer an, wenn ssh versucht, eine Verbindung herzustellen.
+
 
*Auf dem lokalen System ist es wichtig, dass der Root-Benutzer vertrauenswürdig ist, da der Root-Benutzer unter anderem die Schlüsseldatei direkt lesen kann.
+
= Einrichten =
*Auf dem entfernten System ist es beim Weiterleiten der ssh-Agenten-Verbindung auch wichtig, dass der Root-Benutzer am anderen Ende vertrauenswürdig ist, da er auf den Agenten-Socket auf der entfernten Seite zugreifen kann (allerdings nicht auf den Schlüssel, der lokal bleibt).
+
 
 +
* Damit der SSH Agent beim Anmelden des Benutzers automatisch startet, wird die folgende systemd-Servicedatei angelegt
 +
* '''vim ~/.config/systemd/user/ssh-agent.service'''
 +
 
 +
[Unit]
 +
Description=SSH key agent
 +
 +
[Service]
 +
Type=simple
 +
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
 +
Environment=DISPLAY=:0
 +
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
 +
 +
[Install]
 +
WantedBy=default.target
 +
 
 +
* '''systemctl --user enable --now ssh-agent.service'''
 +
* Dann muss man SSH sagen, dass die Schlüssel zum Agent hinzugefügt werden sollen
 +
* '''vim ~/.ssh/config'''
 +
 
 +
AddKeysToAgent yes
 +
 
 +
* Als letztes muss man die Umgebungsvariable des Sockets vom SSH-Agent setzen, damit SSH auch mit dem Agent kommunizieren kann
 +
* '''export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket'''
 +
* Diesen Befehl kann man entweder in ''.bash_profile'', ''.zprofile'', ''.xinitrc'' oder ''.xprofile'' setzen, je nachdem was die Desktopumgebung verwendet
 +
 
 +
=Wenn kein grafisches System vorhanden ist=
 +
*[[Ssh agent start]]

Aktuelle Version vom 18. August 2024, 15:46 Uhr

  • Für zusätzliche Sicherheit ist es üblich, den privaten Schlüssel in verschlüsselter Form zu speichern,
  • Zum Entschlüsseln wird eine Passphrase genutzt.
  • Da die Eingabe der Passphrase mühsam sein kann, möchten viele Benutzer sie nur einmal pro lokaler Anmeldesitzung eingeben.
  • Der sicherste Ort zum Speichern des unverschlüsselten Schlüssels ist der Programmspeicher
  • In Unix-ähnlichen Betriebssystemen ist der Speicher normalerweise mit einem Prozess verbunden.
  • Die SSH-Client-Prozesse dauern nur so lange wie die Remote-Anmeldesitzung.
  • Daher führen Benutzer ein Programm namens ssh-agent aus, das über die Dauer einer lokalen Anmeldesitzung hinaus läuft.
  • Dieses speichert unverschlüsselte Schlüssel im Speicher und kommuniziert mit SSH-Clients über einen Unix-Domain-Socket.
  • ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von SSH.
  • Wenn der Agent startet, erstellt er ein neues Verzeichnis in /tmp mit restriktiven Berechtigungen.
  • Der Socket befindet sich in diesem Verzeichnis.

Einrichten

  • Damit der SSH Agent beim Anmelden des Benutzers automatisch startet, wird die folgende systemd-Servicedatei angelegt
  • vim ~/.config/systemd/user/ssh-agent.service
[Unit]
Description=SSH key agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
Environment=DISPLAY=:0
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target
  • systemctl --user enable --now ssh-agent.service
  • Dann muss man SSH sagen, dass die Schlüssel zum Agent hinzugefügt werden sollen
  • vim ~/.ssh/config
AddKeysToAgent yes
  • Als letztes muss man die Umgebungsvariable des Sockets vom SSH-Agent setzen, damit SSH auch mit dem Agent kommunizieren kann
  • export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
  • Diesen Befehl kann man entweder in .bash_profile, .zprofile, .xinitrc oder .xprofile setzen, je nachdem was die Desktopumgebung verwendet

Wenn kein grafisches System vorhanden ist