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.