SSH Server
SSH-Server
Der SSH-Server ermöglicht es, eingehende SSH-Verbindungen entgegenzunehmen. Unter Debian/Ubuntu läuft er als Systemdienst und wird über systemctl verwaltet.
Pakete
- SSH besteht aus dem Metapaket
ssh
- Dieses beinhaltet die Pakete
openssh-client– der SSH-Client (für ausgehende Verbindungen)openssh-server– der SSH-Daemon (für eingehende Verbindungen)openssh-sftp-server– SFTP-Subsystem für Dateiübertragungen
Installation:
apt install ssh
Dienstverwaltung
Der SSH-Server läuft als Systemdienst und wird über systemctl verwaltet.
Für Logs wird journalctl verwendet.
Starten / Stoppen
Dienst starten
systemctl start ssh
Dienst stoppen
systemctl stop ssh
Dienst neu starten (z. B. nach Konfigurationsänderung)
systemctl restart ssh
Autostart beim Systemstart
SSH automatisch beim Booten starten
systemctl enable ssh
Autostart deaktivieren
systemctl disable ssh
Status prüfen
systemctl status ssh
Zeigt ob der Dienst läuft, seit wann, die PID und die letzten Logzeilen.
Logs verfolgen
journalctl -fu ssh
-f– folgt dem Log in Echtzeit (wietail -f)-u ssh– filtert nur auf den SSH-Dienst
Nützlich zum Debuggen von fehlgeschlagenen Verbindungsversuchen oder Konfigurationsfehlern.
Nur die letzten 50 Zeilen anzeigen:
journalctl -u ssh -n 50
Logs eines bestimmten Zeitraums:
journalctl -u ssh --since "2025-04-01 00:00" --until "2025-04-01 23:59"
Konfigurationsverzeichnis
ls /etc/ssh
moduli sshd_config.d ssh_host_ed25519_key.pub ssh_config ssh_host_ecdsa_key ssh_host_rsa_key ssh_config.d ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub sshd_config ssh_host_ed25519_key
| Datei/Verzeichnis | Bedeutung |
|---|---|
sshd_config |
Hauptkonfiguration des SSH-Servers |
sshd_config.d/ |
Optionale Drop-in-Konfigurationen (werden von sshd_config eingelesen) |
ssh_config |
Systemweite Client-Konfiguration (gilt für alle Nutzer) |
ssh_config.d/ |
Drop-ins für die systemweite Client-Konfiguration |
moduli |
Parameter für den Diffie-Hellman-Schlüsselaustausch |
ssh_host_*_key |
Private Host Keys des Servers (niemals weitergeben) |
ssh_host_*_key.pub |
Öffentliche Host Keys (werden dem Client beim Verbindungsaufbau gezeigt) |
Die Hauptkonfigurationsdatei
Die Hauptkonfigurationsdatei des SSH-Servers ist /etc/ssh/sshd_config.
Sie enthält viele auskommentierte Standardwerte. Um einen besseren Überblick zu bekommen,
empfiehlt es sich, zuerst ein Backup anzulegen und dann eine bereinigte Version zu erstellen.
Backup der Originaldatei anlegen:
cp sshd_config sshd_config.org
Nur aktive (nicht auskommentierte) Zeilen in die Konfigurationsdatei schreiben:
grep "^[^#]" sshd_config.org > sshd_config
Ergebnis anzeigen:
cat sshd_config
Die Standardkonfiguration unter Debian/Ubuntu enthält dann folgende aktive Einstellungen:
Include /etc/ssh/sshd_config.d/*.conf KbdInteractiveAuthentication no UsePAM yes X11Forwarding yes PrintMotd no AcceptEnv LANG LC_* COLORTERM NO_COLOR Subsystem sftp /usr/lib/openssh/sftp-server
Erklärung der Standardeinstellungen
| Option | Wert | Erklärung |
|---|---|---|
Include
|
/etc/ssh/sshd_config.d/*.conf
|
Bindet alle .conf-Dateien aus dem Verzeichnis /etc/ssh/sshd_config.d/ ein. Ermöglicht modulare Konfiguration. Hinweis: Include steht ganz am Anfang, da Drop-in-Dateien Werte aus sshd_config überschreiben können.
|
KbdInteractiveAuthentication
|
no
|
Deaktiviert die tastaturbasierte interaktive Authentifizierung (früher ChallengeResponseAuthentication). Betrifft z. B. Einmalpasswörter (OTP) oder PAM-Abfragen mit Benutzerinteraktion.
|
UsePAM
|
yes
|
Aktiviert PAM (Pluggable Authentication Modules) – das zentrale Authentifizierungssystem unter Linux. Übernimmt Passwortprüfung, Sitzungsverwaltung und Zugriffskontrolle. Bleibt auch bei deaktiviertem Passwort-Login aktiv. |
X11Forwarding
|
yes
|
Erlaubt die Weiterleitung grafischer Anwendungen über SSH (ssh -X). Auf reinen Produktionsservern empfiehlt sich no, da es ein potenzielles Sicherheitsrisiko darstellt.
|
PrintMotd
|
no
|
Deaktiviert die Ausgabe der Message of the Day (/etc/motd) durch den SSH-Daemon. Die Ausgabe übernimmt stattdessen PAM, um doppelte Ausgaben zu vermeiden.
|
AcceptEnv
|
LANG LC_* COLORTERM NO_COLOR
|
Erlaubt dem Client, Umgebungsvariablen zu übertragen: Sprache (LANG), Locale-Einstellungen (LC_*), Terminal-Farbunterstützung (COLORTERM) und Farb-Deaktivierung (NO_COLOR).
|
Subsystem sftp
|
/usr/lib/openssh/sftp-server
|
Aktiviert das SFTP-Subsystem und gibt den Pfad zum SFTP-Server-Programm an. Ohne diese Zeile sind keine SFTP-Verbindungen möglich. |
Empfohlene Konfiguration für Einsteiger
Die folgenden Einstellungen werden direkt in /etc/ssh/sshd_config gesetzt.
Nach jeder Änderung muss der SSH-Dienst neu geladen werden:
systemctl reload ssh
1. Port ändern
Standardmäßig lauscht SSH auf Port 22. Automatisierte Bots scannen das Internet permanent nach offenen Port-22-Verbindungen. Ein anderer Port hält diesen Lärm fern.
Port 2222
Hinweis: Der Port selbst macht den Server nicht sicherer – er reduziert aber das Rauschen in den Logs erheblich. Wähle einen Port zwischen 1024 und 65535 der nicht anderweitig belegt ist.
Nach der Änderung muss der Port beim Verbinden angegeben werden:
ssh -p 2222 user@server
Wichtig: Vor dem Neustart sicherstellen, dass der neue Port in der Firewall freigegeben ist – sonst sperrt man sich selbst aus:
ufw allow 2222/tcp
2. PermitRootLogin no
Verbietet den direkten Login als root über SSH. Root-Zugriff sollte immer über einen
normalen Nutzer mit sudo erfolgen.
PermitRootLogin no
Hinweis: Sicherstellen, dass mindestens ein normaler Nutzer mit sudo-Rechten
existiert, bevor diese Option gesetzt wird – sonst verliert man den administrativen Zugang.
3. PasswordAuthentication no
Deaktiviert den Passwort-Login vollständig. Verbindungen sind dann nur noch per Public Key möglich.
PasswordAuthentication no
Wichtig: Vorher sicherstellen, dass der eigene Public Key auf dem Server hinterlegt ist – sonst sperrt man sich selbst aus:
ssh-copy-id -p 2222 user@server
Siehe auch: SSH-Verbindungsaufbau#Phase 2: User Authentication
4. AllowUsers
Erlaubt nur bestimmten Benutzern den SSH-Zugang. Alle anderen Nutzer werden abgewiesen, auch wenn sie ein gültiges Schlüsselpaar haben.
AllowUsers alice bob
Alternativ kann man ganze Gruppen erlauben:
AllowGroups ssh-users
Die Gruppe anlegen und Nutzer hinzufügen:
groupadd ssh-users usermod -aG ssh-users alice
Hinweis: AllowUsers und AllowGroups können nicht kombiniert werden –
nur eine der beiden Optionen verwenden.
5. ClientAliveInterval und ClientAliveCountMax
Hängende Verbindungen – z. B. nach einem Netzwerkabbruch – bleiben sonst offen und belegen Ressourcen. Diese beiden Optionen trennen inaktive Verbindungen automatisch.
ClientAliveInterval 60 ClientAliveCountMax 3
ClientAliveInterval 60– Server schickt alle 60 Sekunden ein Lebenszeichen an den ClientClientAliveCountMax 3– Nach 3 ausbleibenden Antworten wird die Verbindung getrennt
Die Verbindung wird also nach spätestens 3 × 60 = 180 Sekunden ohne Antwort getrennt.
6. X11Forwarding no
Wie bereits im Abschnitt Standardeinstellungen erklärt, ist X11Forwarding auf Produktionsservern ohne GUI ein unnötiges Sicherheitsrisiko.
X11Forwarding no
7. Banner
Zeigt vor dem Login eine Warnung oder einen Hinweis an. Nützlich z. B. für rechtliche Hinweise oder um unbefugte Nutzer zu warnen.
Datei anlegen:
nano /etc/ssh/banner
Beispielinhalt:
Unbefugter Zugriff ist strafbar. Alle Aktivitaeten werden protokolliert.
In sshd_config eintragen:
Banner /etc/ssh/banner
Hinweis: Der Banner wird vor der Authentifizierung angezeigt – also bevor der Nutzer sein Passwort oder seinen Schlüssel verwendet.
Fertige Konfiguration
Nach allen Änderungen sieht die sshd_config so aus:
Include /etc/ssh/sshd_config.d/*.conf KbdInteractiveAuthentication no UsePAM yes X11Forwarding no PrintMotd no AcceptEnv LANG LC_* COLORTERM NO_COLOR Subsystem sftp /usr/lib/openssh/sftp-server Port 2222 PermitRootLogin no PasswordAuthentication no AllowUsers alice bob ClientAliveInterval 60 ClientAliveCountMax 3 Banner /etc/ssh/banner
Konfiguration auf Syntaxfehler prüfen:
sshd -t
Erst danach neu laden:
systemctl reload ssh
Siehe auch
- SSH-Verbindungsaufbau – Wie eine SSH-Verbindung aufgebaut wird
- SSH-Config – Client-seitige Konfiguration (~/.ssh/config)
- sshd_config – Serverkonfiguration im Detail