SSH Server

Aus Xinux Wiki
Version vom 11. April 2026, 16:59 Uhr von Thomas.will (Diskussion | Beiträge) (→‎Siehe auch)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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 (wie tail -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 Client
  • ClientAliveCountMax 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