SSH Agent: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
*Man kann sich per SSH auf einem anderen Rechner auch per Public-Private-Key verfahren einlogen.
+
[[Kategorie:SSH]]
*Im .ssh-Verzeichnis liegt der privaten Schlüssel des Benutzer.
 
 
*Für zusätzliche Sicherheit ist es üblich, den privaten Schlüssel in verschlüsselter Form zu speichern,
 
*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.
 
*Zum Entschlüsseln wird eine Passphrase genutzt.
Zeile 7: Zeile 6:
 
*In Unix-ähnlichen Betriebssystemen ist der Speicher normalerweise mit einem Prozess verbunden.
 
*In Unix-ähnlichen Betriebssystemen ist der Speicher normalerweise mit einem Prozess verbunden.
 
*Die SSH-Client-Prozesse dauern nur so lange wie die Remote-Anmeldesitzung.  
 
*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,
+
*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.
 
*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.
+
*ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von SSH.
*Jeder, der sich mit diesem Socket verbinden kann, hat auch Zugriff auf den ssh-agenten.
 
*Die Berechtigungen werden wie in einem üblichen Linux- oder Unix-System gesetzt.  
 
 
*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