Zum Inhalt

SSH-Konfiguration

SSH (Secure Shell) ist ein kryptographisches Netzwerkprotokoll, das den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke ermöglicht.

Einstellungen der Server-Konfiguration

Für die Nutzung von SSH werden ein SSH-Server und ein SSH-Client benötigt. Damit der Server sicher arbeitet, muss seine Konfiguration angepasst werden.
Die Einstellungen erfolgen in der Datei:
/etc/ssh/sshd_config

Dort können die gewünschten Optionen eingetragen werden, um den Zugriff abzusichern:

Port 22
KexAlgorithms curve25519-sha256@libssh.org
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
Ciphers chacha20-poly1305@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
UsePrivilegeSeparation yes
SyslogFacility AUTHPRIV
LogLevel VERBOSE
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
PubkeyAuthentication yes
AllowGroups ssh-user
HostbasedAuthentication no
IgnoreRhosts yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 10000
Banner /etc/ssh/sshd-banner
AcceptEnv LANG LC_*
Subsystem   sftp    /usr/lib/openssh/sftp-server

Entfernen der vorhandenen Schlüssel

Damit der Server ausschliesslich mit sicheren Schlüsseln arbeitet, sollten alle bisher vorhandenen Host-Schlüssel entfernt werden:

cd /etc/ssh/
rm ssh_host_*key*

Damit werden alle vorhandenen Host-Keys gelöscht.
Anschliessend wird nur ein neuer, sicherer Schlüssel erzeugt - vorzugsweise ed25519 - um mögliche alte oder unsichere Schlüssel auszuschliessen.

Generieren eines neuen Schlüssels

Erzeuge anschliessend einen neuen ed25519-Hostschlüssel für den Server:

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" < /dev/null

Damit wird ein frischer, sicherer Host-Key erstellt und direkt im Verzeichnis /etc/ssh/ abgelegt.

Benutzer für den SSH-Zugriff vorbereiten

Gruppe ssh-user erstellen

Zuerst eine Gruppe anlegen, die alle berechtigten SSH-Benutzer enthält:
groupadd ssh-user

Benutzer der Gruppe hinzufügen

Nur Benutzer in dieser Gruppe dürfen sich per SSH anmelden:
usermod -a -G ssh-user [username]

Benutzer aus der Gruppe entfernen

Falls ein Benutzer den Zugriff verlieren soll:
gpasswd --delete [username] ssh-user

Damit ist klar geregelt, welche Konten sich per SSH anmelden dürfen.

Der SSH-Client

Erstellen eines sicheren Schlüssels

Für Clients sollten ausschliesslich moderne, sichere Schlüssel verwendet werden. Aktuell empfiehlt sich ed25519 (basierend auf Curve25519):

ssh-keygen -o -a 100 -t ed25519 -C "$(hostname)-$(date +'%d-%m-%Y')"
  • -a 100 legt fest, dass der Schlüssel beim Ableiten der Passphrase 100 Rechenrunden durchläuft. 256 Runden sind das Maximum, bringen aber nur einen geringen zusätzlichen Sicherheitsgewinn. Ohne diese Option werden standardmässig 16 Runden verwendet.

Diese Parameter bieten eine robuste Sicherheit, ohne die Schlüsselgenerierung unnötig zu verlangsamen.

Ein Beispiel für die Schlüsselerstellung:

jc@m8:~$ ssh-keygen -o -a 100 -t ed25519 -C "$(hostname)-$(date +'%d-%m-%Y')"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/jc/.ssh/id_ed25519): 
Enter passphrase for "/home/jc/.ssh/id_ed25519" (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/jc/.ssh/id_ed25519
Your public key has been saved in /home/jc/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:NMu1UFVhr/Aieb1DM4oY9nl0xVVrqkIU1lEgZ9xQeow m8-13-08-2025
The key's randomart image is:
+--[ED25519 256]--+
|         ++BO++.+|
|        ..=o+o oo|
|        +..E.o o+|
|       o.= o.+oo |
|        S.+ +.O  |
|       ..+ *.= + |
|        ..+.o o  |
|          ..   . |
|                 |
+----[SHA256]-----+
jc@m8:~$ 

Es ist üblich, diese Ausgabe als Referenz in einer Datei wie hostkey-gen.txt zu speichern.

Bei der Generierung entstehen zwei Dateien:

  • id_ed25519 - privater Schlüssel, muss streng vertraulich und sicher aufbewahrt werden.

  • id_ed25519.pub - öffentlicher Schlüssel, darf weitergegeben werden.

Der Inhalt von id_ed25519.pub wird auf dem SSH-Server beim entsprechenden Benutzer in die Datei ~/.ssh/authorized_keys eingetragen.

Beispiel für einen öffentlichen Schlüssel:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxCei0PCfpk4k8ioNtp6KYapPzTyN1lb/u7uHtmZUlc m8-13-08-2025

Die SSH-Client-Konfiguration

Für den Client kann eine eigene Konfigurationsdatei angelegt werden, um wiederkehrende Verbindungen zu vereinfachen.
Diese Datei muss im Home-Verzeichnis des Benutzers unter ~/.ssh/config liegen.

Beispielinhalt:

Host jump
    HostName 10.0.0.253
    User pi
    Port 22

Mit dieser Definition lässt sich die Verbindung später einfach herstellen:

ssh jump

SSH fragt dabei automatisch nach dem Passwort des privaten Schlüssels und - je nach Serverkonfiguration - eventuell zusätzlich nach dem Benutzerpasswort.
Wurde das Schlüsselpasswort einmal innerhalb einer Linux-Sitzung eingegeben, bleibt es für die Dauer dieser Session im Speicher, sodass es bei weiteren Verbindungen nicht erneut abgefragt wird.
Die zusätzliche Passwortabfrage für den Benutzer hängt ausschliesslich von den Einstellungen des jeweiligen Servers ab.

Aufruf mit einem anderen Schlüssel

Es kann vorkommen, dass man eine SSH-Verbindung mit einem anderen (älteren) Schlüssel herstellen muss - etwa wenn früher ein anderer Schlüssel für den Server registriert war und der neue noch nicht hinterlegt ist.
In diesem Fall muss die aktuelle Konfiguration nicht geändert werden. Der alte Schlüssel kann direkt angegeben werden:

ssh -i ~/.ssh/old/id_ed25519 jump

Alternativ lässt sich der Schlüssel auch dauerhaft in ~/.ssh/config eintragen:

Host srvstation
    HostName 10.0.3.90
    Port 22
    User jc
    IdentityFile ~/.ssh/old/id_ed25519

Damit wird bei ssh srvstation automatisch der angegebene Schlüssel verwendet.

X11-Forwarding

Manchmal ist es sinnvoll, X11-Forwarding zu aktivieren - etwa wenn die SSH-Verbindung zu einem System mit grafischer Oberfläche führt und man dort eine Anwendung wie den Dateimanager Nautilus starten möchte.

Der Aufruf erfolgt z. B. so:

ssh -X -C jump
  • -X leitet die X11-Ausgabe (grafische Darstellung) durch den SSH-Tunnel.

  • -C aktiviert Kompression, damit die grafischen Daten schneller übertragen werden.

Damit können grafische Programme des entfernten Systems auf dem lokalen Display angezeigt werden.

SSH-Konfiguration testen

Nach Änderungen an der Serverkonfiguration sollte die neue Einstellung unbedingt geprüft werden:

sshd -t

Dieser Befehl testet die sshd_config auf Syntaxfehler, ohne den Dienst neu zu starten.

Wer den Test auslässt und die Konfiguration fehlerhaft speichert, riskiert den Verlust des SSH-Zugangs. Dann bleibt nur der direkte Zugriff vor Ort, um den Server wieder erreichbar zu machen.

Darum: Immer zuerst testen, bevor der Dienst neu gestartet wird.