SSH Agent: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 7: | Zeile 7: | ||
*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-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. | ||
{{#drawio:ssh-agent1-1}} | {{#drawio:ssh-agent1-1}} | ||
| + | |||
| + | = 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 | ||
| + | # DISPLAY required for ssh-askpass to work | ||
| + | Environment=DISPLAY=:0 | ||
| + | ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=default.target | ||
| + | |||
| + | * 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'' setzten, je nachdem was die Desktopumgebung verwendet | ||
Version vom 31. Juli 2023, 08:02 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 # DISPLAY required for ssh-askpass to work Environment=DISPLAY=:0 ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK [Install] WantedBy=default.target
- 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 setzten, je nachdem was die Desktopumgebung verwendet
