Ed25519 SSH-Schlüssel, Multiplexing & OpenSSH-Hardening auf Netcup einrichten
Jede öffentliche IPv4-Adresse im Internet wird innerhalb von 90 Sekunden nach der Bereitstellung von automatisierten SSH-Botnetzen gescannt. Durch den konsequenten Ersatz von Passwort-Logins durch moderne Ed25519-Elliptische-Kurven-Schlüssel (ssh-ed25519) – oder hardwaregestützte FIDO2/YubiKey-Schlüssel (ssh-ed25519-sk) – sinkt das Risiko erfolgreicher Brute-Force-Angriffe auf null. Diese Anleitung behandelt die Schlüsselerzeugung mit 100 KDF-Runden, Client-Multiplexing (ControlMaster), modernes OpenSSH-Cipher/KEX-Hardening und die neue ssh.socket-Architektur von Ubuntu 24.04.
ssh.socket-Aktivierung) und Debian 12. VORAUSSETZUNGEN // ANFORDERUNGEN
CHECKLISTE- ✓ Eine lokale Workstation mit installiertem OpenSSH (
ssh-keygen) unter Linux, macOS oder Windows 11 PowerShell - ✓ Ein Netcup VPS (G11.5s oder G12.5) oder Root-Server (G12.5) mit Ubuntu 24.04 LTS oder Debian 12
Wichtige Erkenntnisse (Key Takeaways)
KURZFAZIT-
01 Generieren Sie Ed25519-Schlüssel mit
-a 100bcrypt-KDF-Runden (ssh-keygen -t ed25519 -a 100), um Ihren privaten Schlüssel auf der Festplatte optimal gegen Offline-Angriffe zu schützen. -
02 Hinterlegen Sie Ihren öffentlichen Schlüssel entweder direkt bei der SCP-OS-Installation (über den SCP SSH-Key-Manager / Cloud-Init) oder per
ssh-copy-id. -
03 Unter Ubuntu 24.04 LTS nutzt OpenSSH systemd Socket-Aktivierung (
ssh.socket); das Ändern des SSH-Ports erfordert daher ein Override vonssh.socketstatt nur einer Änderung vonPortin dersshd_config. -
04 Lassen Sie Ihr aktuelles SSH-Terminalfenster beim Testen einer neuen
sshd_configimmer geöffnet – und nutzen Sie im Notfall die HTML5-VNC-Konsole im Netcup SCP.
📑 Inhaltsverzeichnis (3 Abschnitte) ▼
Schritt 1: Gehärtetes Ed25519-Schlüsselpaar erzeugen & Workstation-Multiplexing einrichten
Klassische RSA-2048-Schlüssel sind sperrig und langsamer in der Prüfung; selbst RSA-4096 erzeugt über 740 Zeichen lange Public Keys, während ECDSA-NIST-P-256-Kurven bei schwachen Zufallszahlengeneratoren (RNG) anfällig für Nonce-Lecks sind. Ed25519 (Curve25519 Edwards-Curve Digital Signature Algorithm, entwickelt von Daniel J. Bernstein) erzeugt kompakte, nur 68 Zeichen lange öffentliche Schlüssel mit 128-Bit-Sicherheitsniveau, deterministischen Signaturen und vollständiger Constant-Time-Resistenz gegen Timing-Seitenkanalangriffe.
Bei der Schlüsselerzeugung übergeben wir zusätzlich den Parameter -a 100. OpenSSH speichert Ihren privaten Schlüssel (~/.ssh/id_ed25519_netcup) im modernen OpenSSH-Key-Format und verschlüsselt ihn über die Schlüsselableitungsfunktion bcrypt_pbkdf mit Ihrer Passphrase. Mit -a 100 erzwingen wir 100 KDF-Runden: Für Sie als Administrator dauert das Entsperren des Schlüssels beim ersten Login nur rund 0,2 Sekunden, für einen Angreifer, der Ihre verschlüsselte Schlüsseldatei von einem gestohlenen Laptop erbeutet hat, verteuert sich ein GPU-gestützter Wörterbuchangriff hingegen um mehrere Größenordnungen.
Wenn Sie einen Hardware-Sicherheitsschlüssel wie einen YubiKey 5 oder Nitrokey 3 besitzen, unterstützt OpenSSH 9.6+ unter Ubuntu 24.04 und Windows 11 nativ den Schlüsseltyp -t ed25519-sk (FIDO2/U2F Security Key). Bei einem ed25519-sk-Schlüssel verbleibt das kryptografische Geheimnis dauerhaft im Secure Element des USB-Tokens, und jede SSH-Anmeldung erfordert eine physische Berührung des Hardware-Keys am Arbeitsplatz.
Auf Ihrer lokalen Workstation (erzeugen Sie private Hauptschlüssel niemals auf dem Remote-Server!) richten wir anschließend in der Datei ~/.ssh/config zwei wichtige Optimierungen ein: IdentitiesOnly yes verhindert, dass Ihr SSH-Agent dem Netcup-Server nacheinander fünf andere lokal geladene Schlüssel anbietet und dadurch versehentlich MaxAuthTries 3 überschreitet. Gleichzeitig bündelt ControlMaster auto mit ControlPersist 600 alle weiteren SSH-, scp- und rsync-Aufrufe über einen bereits aufgebauten TCP/TLS-Tunnel, sodass neue Terminalsitzungen in weniger als 15 Millisekunden öffnen:
| Schlüsseltyp-Flag | Public-Key-Größe | Kryptografische Kurve / Mathematik | Seitenkanal-Resistenz & Geschwindigkeit | Produktions-Empfehlung |
|---|---|---|---|---|
-t ed25519 -a 100 | 256-Bit (68 Zeichen) | Twisted Edwards Curve25519 (Bernstein) | Constant-Time, immun gegen RNG-Schwächen, extrem schnell | STANDARDWAHL für alle Netcup-Server & Automation |
-t ed25519-sk | 256-Bit + FIDO2-Handle | Curve25519 hardwaregebunden (YubiKey / SoloKey) | Private Key verlässt niemals den Hardware-Token | IDEAL FÜR HOCHSICHERHEITS-Admin-Workstations |
-t rsa -b 4096 | 4096-Bit (~740 Zeichen) | Primfaktorzerlegung (RSA-SHA2-512) | Langsamere Signaturprüfung, große authorized_keys | Nur als Legacy-Fallback für alte Systeme |
-t dsa / ssh-rsa (SHA-1) | 1024-Bit / 2048-Bit | Gebrochenes SHA-1 / Diskreter Logarithmus | Ab OpenSSH 8.8+ standardmäßig deaktiviert | VERALTET — Niemals +ssh-rsa wieder aktivieren |
# 1. Ed25519-Schlüsselpaar mit 100 bcrypt-KDF-Runden auf Ihrem lokalen Computer erzeugen
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_netcup -C "admin@netcup-prod-2026"
# 2. ~/.ssh/config auf Ihrer Workstation für Kurz-Login & TCP-Multiplexing konfigurieren
mkdir -p ~/.ssh/sockets && chmod 0700 ~/.ssh ~/.ssh/sockets
cat << 'EOF' >> ~/.ssh/config
Host nc-prod
HostName 203.0.113.10
User deployadmin
Port 22
IdentityFile ~/.ssh/id_ed25519_netcup
IdentitiesOnly yes
ForwardAgent no
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
ServerAliveInterval 60
EOF
chmod 0600 ~/.ssh/config Befehlserklärung: Erstellt ~/.ssh/id_ed25519_netcup (privater Schlüssel) und ~/.ssh/id_ed25519_netcup.pub (öffentlicher Schlüssel) und aktiviert ControlMaster-Multiplexing, sodass nachfolgende ssh nc-prod- oder rsync-Befehle in unter 15 Millisekunden über den bestehenden Tunnel starten.
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/id_ed25519_netcup
Your public key has been saved in /home/user/.ssh/id_ed25519_netcup.pub Schritt 2: Public Key auf Netcup übertragen & /etc/ssh/sshd_config.d/ kryptografisch härten
Auf Netcup stehen Ihnen zwei Wege offen, um Ihren öffentlichen Schlüssel (id_ed25519_netcup.pub) auf den Server zu bringen: Bei einer Neuinstallation können Sie den Public Key direkt im Netcup Server Control Panel (SCP) → Media → Official Images hinterlegen, sodass das Cloud-Init-Image den Schlüssel bereits beim ersten Booten in die authorized_keys schreibt. Auf einem bereits laufenden Server übertragen Sie den Schlüssel mit ssh-copy-id -i ~/.ssh/id_ed25519_netcup.pub [email protected].
Beim Härten des OpenSSH-Daemons unter Ubuntu 24.04 LTS müssen Sie zwingend die First-Match-Wins-Auswertungsreihenfolge von OpenSSH beachten: Ganz oben in der Hauptdatei /etc/ssh/sshd_config steht die Direktive Include /etc/ssh/sshd_config.d/*.conf. OpenSSH liest alle .conf-Dateien in diesem Verzeichnis in lexikalischer Reihenfolge ein und ignoriert jeden späteren Parameter, der bereits gesetzt wurde. Da Cloud-Init standardmäßig /etc/ssh/sshd_config.d/50-cloud-init.conf mit PasswordAuthentication yes anlegt, bleibt der Passwort-Login selbst dann aktiv, wenn Sie am Ende der /etc/ssh/sshd_config PasswordAuthentication no eintragen! Entfernen Sie daher 50-cloud-init.conf und prüfen Sie die effektiv wirksame Konfiguration immer mit sudo sshd -T.
In unserer Härtungsdatei /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf deaktivieren wir außerdem AllowAgentForwarding no (sowie ForwardAgent no auf dem Client). Warum ist klassisches SSH-Agent-Forwarding (ssh -A) ein Sicherheitsrisiko? Wenn Sie Ihren lokalen ssh-agent auf einen Zielserver weiterleiten, legt sshd dort einen Unix-Domain-Socket unter /tmp/ssh-XXXX/agent.XXXX an. Erlangt ein Angreifer auf diesem Server Root-Rechte (oder Zugriff auf Ihr Benutzerkonto), kann er sich an diesen Socket hängen und über Ihren lokalen SSH-Agenten beliebige andere Produktionsserver kapern, solange Ihre Sitzung geöffnet ist. Nutzen Sie für Sprünge über Bastion-Hosts stattdessen immer ProxyJump (ssh -J bastion zielserver), das Ende-zu-Ende-verschlüsselt direkt von Ihrer Workstation aus authentifiziert.
Schließlich beschränken wir die Schlüsselaustausch-Algorithmen (KexAlgorithms), symmetrischen Chiffren (Ciphers) und Message Authentication Codes (MACs) auf moderne, kryptografisch gehärtete Verfahren – allen voran den hybriden Post-Quantum-Schlüsselaustausch [email protected] (Streamlined NTRU Prime kombiniert mit X25519) sowie [email protected] und [email protected]:
# 1. Öffentlichen Schlüssel von Ihrer Workstation auf Ihren Netcup-Server kopieren
ssh-copy-id -i ~/.ssh/id_ed25519_netcup.pub [email protected]
# 2. Auf dem Netcup-Server die Datei /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf anlegen
cat << 'EOF' | sudo tee /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 20
AllowUsers deployadmin
X11Forwarding no
AllowAgentForwarding no
KexAlgorithms [email protected],curve25519-sha256,[email protected]
Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected]
EOF
# Cloud-Init-Passwort-Override entfernen, Syntax prüfen und aktive Parameter ausgeben
sudo rm -f /etc/ssh/sshd_config.d/50-cloud-init.conf
sudo sshd -t && sudo systemctl reload ssh
sudo sshd -T | grep -E "^(permitrootlogin|passwordauthentication|pubkeyauthentication|authenticationmethods)" Befehlserklärung: Erzwingt hybriden Post-Quantum-Schlüsselaustausch ([email protected] / curve25519-sha256), beschränkt den SSH-Zugang strikt auf deployadmin via publickey, entfernt den Cloud-Init-Passwort-Override und verifiziert die Laufzeitwerte per sshd -T.
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
authenticationmethods publickey SICHERHEITSHINWEIS: Wichtig: Schließen Sie Ihr aktuelles SSH-Fenster noch NICHT! Öffnen Sie zuerst ein neues Terminal-Tab auf Ihrer Workstation und testen Sie ssh nc-prod.
Schritt 3: Den SSH-Port unter Ubuntu 24.04 korrekt ändern (ssh.socket)
Ab Ubuntu 22.10 und standardmäßig in Ubuntu 24.04 LTS (Noble Numbat) verwendet OpenSSH systemd Socket-Aktivierung (ssh.socket) anstelle eines permanent im Hintergrund lauschenden ssh.service-Daemons. Dabei bindet systemd selbst (PID 1) den TCP-Port 22 und startet den eigentlichen sshd-Prozess erst dann, wenn das erste TCP-SYN-Paket eintrifft. Das hat eine wichtige Konsequenz für Administratoren: Ein klassischer Eintrag Port 2222 in der /etc/ssh/sshd_config bewirkt unter Ubuntu 24.04 überhaupt nichts, weil der Socket-Listener von systemd gesteuert wird!
Wenn Sie SSH auf einen benutzerdefinierten Port (z. B. 2222) verlegen möchten, um 99 % des automatisierten Hintergrund-Rauschens durch Botnetze in Ihren journald-Logs auszublenden, müssen Sie ein systemd-Drop-in-Override unter /etc/systemd/system/ssh.socket.d/override.conf anlegen. Beachten Sie dabei eine wichtige Syntaxregel von systemd: Da ListenStream= eine additive Liste ist, müssen Sie zuerst eine leere Zeile ListenStream= schreiben, um den Standard-Listener auf Port 22 zu löschen, bevor Sie ListenStream=0.0.0.0:2222 und ListenStream=[::]:2222 definieren.
Geben Sie den neuen Port zwingend vor dem Neustart von ssh.socket sowohl in Ihrer lokalen ufw-Firewall (sudo ufw allow 2222/tcp) als auch in der Netcup SCP Stateful Firewall frei. Vergessen Sie die Freigabe in einer der beiden Firewalls, verwirft der Paketfilter jede neue Verbindung auf Port 2222 sofort.
Sollten Sie sich bei einer Änderung an ssh.socket, AllowUsers oder den Firewall-Regeln dennoch einmal aussperren, verlieren Sie auf Netcup niemals den Zugriff auf Ihren Server: Öffnen Sie einfach das Netcup Server Control Panel (servercontrolpanel.de) → Server auswählen → Screen, um die HTML5-VNC-Notfallkonsole direkt im Browser zu starten. Da die VNC-Konsole eine virtuelle VGA-Tastatur/Bildschirm-Verbindung über den Hypervisor herstellt (tty1), ist sie komplett unabhängig vom Netzwerkstack, von UFW und von sshd:
# 1. Neuen SSH-Port in UFW (und in der Netcup SCP Firewall!) VOR dem Umschalten freigeben
sudo ufw allow 2222/tcp comment 'Custom OpenSSH Port'
# 2. systemd Socket-Override für ssh.socket erstellen
sudo mkdir -p /etc/systemd/system/ssh.socket.d
cat << 'EOF' | sudo tee /etc/systemd/system/ssh.socket.d/override.conf
[Socket]
ListenStream=
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222
EOF
# 3. systemd neu laden und ssh.socket neu starten
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo ss -tlpn | grep 2222 Befehlserklärung: Ein leeres ListenStream= löscht zunächst den Standard-Listener auf Port 22, bevor 0.0.0.0:2222 und [::]:2222 gebunden werden.
LISTEN 0 4096 0.0.0.0:2222 0.0.0.0:* users:(("systemd",pid=1,fd=98)) Bevor Sie ssh.socket auf Port 2222 neu starten, müssen Sie 2222/tcp sowohl in UFW als auch in der Netcup SCP Firewall (falls aktiviert) erlauben, da neue Verbindungen sonst sofort an der Firewall abprallen.
Häufige Fehlerbehebung
DIAGNOSE-GUIDE [SYMPTOM] SSH-Verbindung meldet Permission denied (publickey), obwohl der Schlüssel in authorized_keys steht
Ursache: OpenSSH StrictModes yes verweigert das Lesen von ~/.ssh/authorized_keys, wenn /home/deployadmin, ~/.ssh oder authorized_keys Schreibrechte für die Gruppe hat oder root gehört.
Lösung: Melden Sie sich über Ihre noch offene Root-Sitzung oder die Netcup SCP HTML5-VNC-Konsole an und führen Sie chown -R deployadmin:deployadmin /home/deployadmin/.ssh && chmod 0700 /home/deployadmin/.ssh && chmod 0600 /home/deployadmin/.ssh/authorized_keys aus.
[SYMPTOM] AllowUsers falsch geschrieben oder SSH-Key verloren – kein SSH-Login mehr möglich
Ursache: Schlüssel-Konflikt oder Tippfehler bei AllowUsers in /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf.
Lösung: Öffnen Sie das Netcup Server Control Panel (servercontrolpanel.de) → Server auswählen → Screen (HTML5-VNC-Konsole). Melden Sie sich direkt am lokalen TTY-Prompt an (dieser nutzt lokales PAM statt sshd) und korrigieren Sie die Datei /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf.
[SYMPTOM] Unter Windows PowerShell wird der Befehl ssh-copy-id nicht gefunden
Ursache: Windows 11 enthält zwar OpenSSH ssh.exe und ssh-keygen.exe, liefert aber das POSIX-Shell-Skript ssh-copy-id nicht mit.
Lösung: Führen Sie in PowerShell type $env:USERPROFILE\.ssh\id_ed25519_netcup.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" aus.
Häufig gestellte Fragen (FAQ)
GEPRÜFTE ANTWORTENKann ich meinen öffentlichen SSH-Schlüssel direkt im Netcup Server Control Panel (SCP) hinterlegen?
Ja! Unter Ihrem Benutzerprofil bzw. im Media / Images-Installationsassistenten im SCP können Sie Ihren Ed25519-Public-Key speichern, sodass jede neue Ubuntu/Debian-Installation den Schlüssel automatisch hinterlegt.
Unterstützt OpenSSH unter Ubuntu 24.04 Hardware-Sicherheitsschlüssel wie YubiKey / FIDO2 (ed25519-sk)?
Ja. OpenSSH 9.6 unter Ubuntu 24.04 unterstützt ssh-keygen -t ed25519-sk -O resident nativ – damit ist bei jeder SSH-Anmeldung eine physische Berührung Ihres Hardware-Security-Keys erforderlich.
Kann ich auf Netcup SOWOHL einen Ed25519-SSH-Key ALS AUCH einen TOTP-2FA-Code verlangen?
Ja. Installieren Sie libpam-google-authenticator, führen Sie google-authenticator als deployadmin aus, setzen Sie KbdInteractiveAuthentication yes und definieren Sie AuthenticationMethods publickey,keyboard-interactive in der /etc/ssh/sshd_config.d/99-netcup-crypto-hardening.conf.
Warum wurde AllowAgentForwarding no in die Härtungskonfiguration aufgenommen?
Wenn ein Angreifer Root-Rechte auf einem Jump-Host erlangt, auf den Ihr SSH-Agent-Socket (/tmp/ssh-XXXX/agent.XXXX) weitergeleitet wurde, kann er Ihre Schlüssel missbrauchen. Nutzen Sie stattdessen immer ProxyJump (ssh -J bastion target).
QUELLEN // GEPRÜFTE TECHNISCHE DOKUMENTATION
- [1] OpenSSH sshd_config Official Manual Page (https://man.openbsd.org/sshd_config)
- [2] Mozilla OpenSSH Modern Security Guidelines (https://infosec.mozilla.org/guidelines/openssh)