OpenSSH Paket
Remote Services – SSH
SSH (Secure Shell) ist ein Netzwerkprotokoll für den sicheren Zugriff auf entfernte Systeme. Es verschlüsselt die gesamte Kommunikation und ersetzt unsichere Protokolle wie Telnet oder FTP.
Was SSH verhindert
- DNS Spoofing
- IP Spoofing
- IP Source Routing
- Ausspähen von Klartextkennwörtern und Nutzdaten
- Manipulation von übertragenen Daten
- Angriffe auf den X11-Server
SSH ersetzt
| Altes Protokoll | Ersetzt durch |
|---|---|
| telnet, rlogin | ssh |
| ftp, rcopy | scp / sftp |
Das OpenSSH Paket
OpenSSH ist die meistverbreitete Implementierung des SSH-Protokolls unter Linux/Unix. Es enthält folgende Programme:
- ssh – Remote-Login und Befehlsausführung
- scp – Secure Copy (Dateiübertragung)
- sftp – Secure FTP (interaktive Dateiübertragung)
- ssh-keygen – Schlüsselpaar generieren
- ssh-agent – Schlüsselverwaltung im Speicher
- ssh-add – Schlüssel zum Agent hinzufügen
SSH Verbindungsszenarien
Es gibt zwei typische Szenarien:
- Lokaler unprivilegierter Benutzer loggt sich als remote unprivilegierter Benutzer ein
- alice (ssh client) → ssh Verbindung → bob (ssh server)
- Lokaler unprivilegierter Benutzer loggt sich als root ein
- alice (ssh client) → ssh Verbindung → root (ssh server)
SSH Verbindungsaufbau
Der SSH-Verbindungsaufbau läuft in 3 Phasen ab:
Phase 1: Transport Layer + Key Exchange
SSH Verbindungsaufbau Public Key Auth
- ClientHello – Client schickt unterstützte Algorithmen (KEX, Host-Key, Cipher/Hash/MAC)
- ServerHello – Server wählt Algorithmen und schickt seinen öffentlichen Host Key
- Host-Key-Prüfung – Client vergleicht den Host Key mit
~/.ssh/known_hosts, bei unbekanntem Host kommt eine Fingerprint-Warnung - Diffie-Hellman/ECDH – Client sendet Public-Value, Server antwortet mit DH Public-Value + Signatur mit privatem Host Key
- Session Key Berechnung – Beide Seiten berechnen denselben Schlüssel → ab jetzt: symmetrische Verschlüsselung
- Diffie-Hellman Prinzip
- Protokoll zur Schlüsselvereinbarung. Es ermöglicht, dass zwei Kommunikationspartner über eine öffentliche, abhörbare Leitung einen gemeinsamen geheimen Schlüssel in Form einer Zahl vereinbaren können.
Phase 2: User Authentication
Ab hier ist die gesamte Kommunikation verschlüsselt.
Authentifizierung mit Public Key
SSH Verbindungsaufbau Public Key Auth
- Client sendet: Username, Methode »Public Key«, welcher Public Key
- Server prüft: Ist der Public Key in
~/.ssh/authorized_keys?- NEIN → Auth fail
- JA → Challenge (Zufallsdaten) senden
- Client signiert die Challenge mit dem privaten Client Key und schickt die Signatur zurück
- Server prüft Signatur mit dem öffentlichen Client Key → bei Erfolg: Auth SUCCESS
Authentifizierung mit Passwort
SSH Verbindungsaufbau Passwort Auth
- Client sendet: Username + Methode »Password«
- Client sendet: Username + Passwort (verschlüsselt!)
- Server prüft Passwort:
- NEIN → Auth fail
- JA → Auth ok
Phase 3: Session Phase (Channels)
- Session Channel wird geöffnet: Shell / Exec / PTY
- Symmetrisch verschlüsselt
- Integritätsgeschützt
Schlüsseldateien
Server – Hostschlüssel
Der Server hat eigene Schlüsselpaare zur Identifikation:
- Geheime Hostschlüssel (nur root lesbar!)
/etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
- Öffentliche Hostschlüssel
/etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub
Client – Benutzerschlüssel
- Geheimer Benutzerschlüssel (nur der Benutzer darf ihn lesen!)
~/.ssh/id_rsa
- Öffentlicher Benutzerschlüssel
~/.ssh/id_rsa.pub
SSH Authentifizierung mit Public/Private Keys
Schlüssel generieren – ssh-keygen
- Eine Zufallszahl dient als Basis für die Schlüsselgenerierung
- ssh-keygen erzeugt ein Schlüsselpaar:
- Privater Schlüssel – bleibt lokal, wird mit einer Passphrase geschützt gespeichert
- Öffentlicher Schlüssel – wird auf den Server kopiert
- Der private Schlüssel wird mit einer Passphrase verschlüsselt → Geschützter Schlüssel auf der Harddisk
ssh-keygen -t ed25519 -C "kommentar@beispiel.de"
Öffentlichen Schlüssel auf Server hinterlegen
Der öffentliche Schlüssel des Benutzers muss auf dem Server in folgende Datei eingetragen werden:
~/.ssh/authorized_keys
Jede Zeile enthält den Schlüssel eines Benutzers. Zur Übersicht empfiehlt es sich, am Ende der Zeile eine Beschreibung (z. B. E-Mail) hinzuzufügen:
ssh-rsa AAAAB3Nz...== rudi.ruessel@beispiel.de ssh-rsa AAAAB3Nz...== erwin.lindemann@beispiel.de
Known Hosts – Serververtrauen auf Client-Seite
Die Datei ~/.ssh/known_hosts speichert die öffentlichen Hostschlüssel aller bekannten Server. Bei jeder Verbindung wird der Schlüssel des Servers damit verglichen.
~/.ssh/known_hosts
Beim ersten Verbindungsaufbau zu einem unbekannten Server erscheint eine Fingerprint-Warnung – erst nach Bestätigung wird der Schlüssel gespeichert.
SSH Agent
Wozu ein SSH Agent?
- Für zusätzliche Sicherheit wird der private Schlüssel verschlüsselt (mit Passphrase) gespeichert
- Die Eingabe der Passphrase bei jeder Verbindung ist mühsam
- Lösung: ssh-agent entschlüsselt den Schlüssel einmalig und hält ihn sicher im Arbeitsspeicher
- SSH-Clients kommunizieren mit dem Agent über einen Unix-Domain-Socket
- Der Agent läuft über die gesamte lokale Anmeldesitzung
Ablauf ssh-add
- Geschützter Schlüssel von der Harddisk + Passphrase eingeben
- → ssh-add entschlüsselt → privater Schlüssel landet im Arbeitsspeicher
- SSH-Clients (ssh, scp, sftp, rsync) nutzen den Schlüssel automatisch vom Agent
SSH Agent einrichten (systemd)
Damit der SSH Agent automatisch beim Anmelden startet:
- 1. Servicedatei anlegen
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
- 2. Service aktivieren
systemctl --user enable --now ssh-agent.service
- 3. SSH konfigurieren – Schlüssel automatisch zum Agent hinzufügen
vim ~/.ssh/config
AddKeysToAgent yes
- 4. Umgebungsvariable setzen (in .bash_profile / .zprofile / .xinitrc / .xprofile)
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
Siehe auch: ssh agent start (für Systeme ohne grafische Oberfläche)
Weiterführende Themen
Grundlagen
Client & Server
Dateiübertragung
Authentifizierung
- SSH Agent
- Authentifizierung mit Schlüssel
- ssh passwort auf key
- ssh passt id_rsa zu id_rsa.pub
- two-factor authentication