SSH-Zugang: Der vollständige technische Leitfaden zur sicheren Remote-Server-Verwaltung
SSH (Secure Shell) ist ein kryptografisches Netzwerkprotokoll, das einen verschlüsselten Tunnel zwischen zwei vernetzten Hosts aufbaut und authentifizierte Befehlsausführung, Dateiübertragung und Port-Weiterleitung über nicht vertrauenswürdige Netzwerke ermöglicht. Es arbeitet standardmäßig auf TCP-Port 22 und ersetzt Klartext-Vorgänger — Telnet, rsh und FTP — durch ein Protokoll, das Vertraulichkeit, Integrität und gegenseitige Authentifizierung in einem einzigen Handshake bietet.
Für jeden Administrator, der einen VPS oder dedizierten Server verwaltet, ist SSH keine optionale Infrastruktur — es ist die primäre Steuerungsebene. Jede Konfigurationsentscheidung, die Sie rund um SSH treffen, wirkt sich direkt auf die Angriffsfläche Ihres Servers, die Betriebszuverlässigkeit und die Compliance-Position aus.
Wie SSH funktioniert: Die Protokollarchitektur
Das Verständnis von SSH auf Protokollebene ist das, was Administratoren, die es korrekt konfigurieren, von denen unterscheidet, die ausnutzbare Lücken hinterlassen.
Das Drei-Schichten-Modell
SSH ist durch RFC 4251–4254 definiert und arbeitet über drei verschiedene Unterschichten, die auf TCP aufgestapelt sind:
- SSH Transport Layer Protocol — verwaltet die Serverauthentifizierung, den Schlüsselaustausch, die Verschlüsselungsaushandlung und die MAC-Einrichtung (Message Authentication Code). Hier findet der kryptografische Handshake statt.
- SSH User Authentication Protocol — läuft auf der Transportschicht und verwaltet die Client-zu-Server-Authentifizierung mit Methoden wie
publickey,password,keyboard-interactiveodergssapi-with-mic. - SSH Connection Protocol — multiplext den verschlüsselten Tunnel in logische Kanäle, von denen jeder eine Shell-Sitzung, ein SFTP-Subsystem, einen weitergeleiteten Port oder eine Agent-Verbindung trägt.
Der Handshake im Detail
Wenn Sie ssh user@host ausführen, wird die folgende Sequenz ausgeführt, bevor Sie eine Eingabeaufforderung sehen:
- TCP-Verbindung wird zum Server auf dem konfigurierten Port hergestellt.
- Versionsaustausch — Client und Server tauschen Protokollversionszeichenfolgen aus (
SSH-2.0-OpenSSH_9.x). - Algorithmusaushandlung (
SSH_MSG_KEXINIT) — beide Seiten bewerben unterstützte Schlüsselaustausch-Algorithmen, Host-Key-Typen, Chiffren, MACs und Komprimierungsmethoden. Die erste gegenseitig unterstützte Option in jeder Liste gewinnt. - Schlüsselaustausch (KEX) — typischerweise Diffie-Hellman oder Elliptic Curve Diffie-Hellman (ECDH). Beide Seiten leiten ein gemeinsames Geheimnis ab, ohne es zu übertragen. Dies erzeugt Sitzungsschlüssel.
- Server-Host-Key-Verifizierung — der Server signiert einen Wert mit seinem privaten Host-Key. Der Client überprüft diese Signatur anhand seiner
~/.ssh/known_hosts-Datei. Eine Nichtübereinstimmung löst eine Warnung aus und blockiert die Verbindung standardmäßig. - Verschlüsselung aktiviert — der gesamte nachfolgende Datenverkehr wird mit der ausgehandelten Chiffre (z. B.
chacha20-poly1305) und MAC verschlüsselt und integritätsgeschützt. - Benutzerauthentifizierung — der Client versucht die Authentifizierung mit der ausgehandelten Methode. Bei
publickey-Auth signiert der Client eine Herausforderung mit seinem privaten Schlüssel; der Server verifiziert mit dem gespeicherten öffentlichen Schlüssel. - Kanal öffnen — eine Shell, ein SFTP-Subsystem oder ein Exec-Kanal wird geöffnet und die Sitzung beginnt.
Dieser gesamte Prozess wird typischerweise in unter 100 Millisekunden in einem lokalen Netzwerk abgeschlossen.
Symmetrische vs. asymmetrische Kryptografie in SSH
Ein häufiges Missverständnis ist, dass SSH für den gesamten Datenverkehr „Public-Key-Verschlüsselung” verwendet. Das tut es nicht. Die Rollen sind unterschiedlich:
| Kryptografische Rolle | Algorithmustyp | Zweck |
|---|
| — | — | — |
|---|
| Schlüsselaustausch | Asymmetrisch (ECDH, DH) | Gemeinsames Sitzungsgeheimnis ableiten, ohne es zu übertragen |
|---|
| Sitzungsverschlüsselung | Symmetrisch (AES-GCM, ChaCha20) | Massendaten effizient verschlüsseln |
|---|
| Serverauthentifizierung | Asymmetrisch (RSA, Ed25519, ECDSA) | Serveridentität über Host-Key-Signatur nachweisen |
|---|
| Client-Authentifizierung | Asymmetrisch (RSA, Ed25519) | Client-Identität über Schlüsselpaar-Herausforderung nachweisen |
|---|
| Integritätsverifizierung | HMAC (SHA-256, SHA-512) oder AEAD | Manipulation verschlüsselter Pakete erkennen |
|---|
SSH vs. Legacy-Fernzugriffsprotokolle
| Funktion | SSH | Telnet | FTP | RDP |
|---|
| — | — | — | — | — |
|---|
| Verschlüsselung | Vollständig (Transport + Auth) | Keine | Keine (Daten); optionales TLS | TLS/RC4 |
|---|
| Authentifizierung | Passwort, Schlüsselpaar, Zertifikat, GSSAPI | Passwort (Klartext) | Passwort (Klartext) | Passwort, Smartcard, NLA |
|---|
| Port | 22 (konfigurierbar) | 23 | 21 (Steuerung), 20 (Daten) | 3389 |
|---|
| Dateiübertragung | SFTP, SCP integriert | Nein | Ja (unsicher) | Zwischenablage/Laufwerk-Umleitung |
|---|
| Port-Weiterleitung | Ja (lokal, remote, dynamisch) | Nein | Nein | Eingeschränkt |
|---|
| MFA-Unterstützung | Ja (über PAM, TOTP) | Nein | Selten | Ja |
|---|
| Firewall-Durchquerung | Einzelner TCP-Port | Einzelner TCP-Port | Erfordert Passivmodus-Konfiguration | Einzelner TCP-Port |
|---|
| Primärer Anwendungsfall | Linux/Unix-Serveradministration | Legacy-Systeme | Dateiübertragung (Legacy) | Windows Desktop/Server |
|---|
SSH-Schlüsselpaare generieren
SSH-Schlüsselpaare sind die Grundlage für sicheren, skalierbaren Serverzugriff. Passwortauthentifizierung ist anfällig für Brute-Force-Angriffe und Credential Stuffing; schlüsselbasierte Authentifizierung ist es nicht.
Den richtigen Schlüsselalgorithmus wählen
Ed25519 ist die aktuelle Best Practice. Es verwendet Curve25519-Elliptische-Kurven-Kryptografie, erzeugt kompakte 256-Bit-Schlüssel, ist schneller als RSA bei gleichwertigen Sicherheitsniveaus und wird von OpenSSH 6.5+ (veröffentlicht 2014) unterstützt.
ssh-keygen -t ed25519 -C "admin@yourhost.example.com"Verwenden Sie RSA nur, wenn Sie Kompatibilität mit Legacy-Systemen benötigen, die Ed25519 nicht unterstützen:
ssh-keygen -t rsa -b 4096 -C "admin@yourhost.example.com"Verwenden Sie kein DSA (auf 1024 Bit begrenzt, gebrochen) oder ECDSA mit NIST-Kurven (Bedenken hinsichtlich der NIST-Kurvenparameter-Herkunft). Ed25519 ist die eindeutige Wahl für neue Deployments.
Schlüsselgenerierungs-Walkthrough
ssh-keygen -t ed25519 -C "ops-team-key-2025"Sie werden aufgefordert für:
- Dateispeicherort — Standard ist
~/.ssh/id_ed25519. Akzeptieren Sie den Standard oder geben Sie einen benutzerdefinierten Pfad für Multi-Key-Umgebungen an. - Passphrase — setzen Sie immer eine. Eine Passphrase verschlüsselt den privaten Schlüssel im Ruhezustand mit AES-256-CBC (oder bcrypt mit neuerem OpenSSH). Wenn Ihre private Schlüsseldatei gestohlen wird, ist die Passphrase die letzte Verteidigungslinie.
Dies erzeugt zwei Dateien:
~/.ssh/id_ed25519 — der private Schlüssel. Teilen Sie diesen niemals. Berechtigungen müssen 600 sein.
~/.ssh/id_ed25519.pub — der öffentliche Schlüssel. Dies ist, was Sie an Server verteilen.
Mehrere Schlüssel mit ~/.ssh/config verwalten
Wenn Sie mehrere Server oder Konten verwalten, verwenden Sie eine SSH-Konfigurationsdatei, um zu vermeiden, dass Sie bei jeder Verbindung Flags angeben müssen:
# ~/.ssh/config
Host prod-web
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519_prod
Port 2222
Host staging
HostName 203.0.113.20
User ubuntu
IdentityFile ~/.ssh/id_ed25519_staging
Damit erweitert sich ssh prod-web automatisch auf die vollständigen Verbindungsparameter.
Ihren öffentlichen Schlüssel auf einem Server bereitstellen
Methode 1: ssh-copy-id (Empfohlen für die Ersteinrichtung)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_server_ip
Dies fügt den öffentlichen Schlüssel an ~/.ssh/authorized_keys auf dem Remote-Host an und setzt automatisch korrekte Berechtigungen.
Methode 2: Manuelle Bereitstellung (wenn ssh-copy-id nicht verfügbar ist)
cat ~/.ssh/id_ed25519.pub | ssh user@your_server_ip
"mkdir -p ~/.ssh && chmod 700 ~/.ssh &&
cat >> ~/.ssh/authorized_keys &&
chmod 600 ~/.ssh/authorized_keys"
Methode 3: Cloud-Anbieter-Konsole oder API
Die meisten Cloud-Anbieter und Hosting-Kontrollpanels ermöglichen es Ihnen, öffentliche Schlüssel während der Instanz-Bereitstellung einzufügen. Dies ist der richtige Ansatz für automatisierte Infrastruktur — der Schlüssel ist vorhanden, bevor die Instanz startet, was das Henne-Ei-Problem der Notwendigkeit von SSH zur Bereitstellung von SSH-Schlüsseln eliminiert.
Das authorized_keys-Dateiformat
Jede Zeile in ~/.ssh/authorized_keys ist ein öffentlicher Schlüssel, optional mit Optionen vorangestellt:
restrict,command="/usr/local/bin/backup.sh" ssh-ed25519 AAAA... backup-key
from="192.168.1.0/24" ssh-ed25519 AAAA... ops-key
Die Option restrict deaktiviert Port-Weiterleitung, Agent-Weiterleitung und PTY-Zuweisung für diesen Schlüssel — nützlich für Deployment-Schlüssel oder Backup-Automatisierungskonten, die keinen interaktiven Shell-Zugriff haben sollten.
Den SSH-Server härten: /etc/ssh/sshd_config
Eine Standard-OpenSSH-Installation ist funktional, aber nicht gehärtet. Die folgende Konfiguration stellt eine produktionsreife Basislinie dar. Wenden Sie Änderungen auf /etc/ssh/sshd_config an, validieren und laden Sie dann neu:
sshd -t && systemctl reload sshd
Führen Sie immer sshd -t aus, bevor Sie neu laden — ein Syntaxfehler in sshd_config lässt den laufenden Daemon nicht abstürzen, verhindert aber, dass er nach einem Neustart neu startet, und sperrt Sie aus.
Empfohlener sshd_config-Härtungsblock
# /etc/ssh/sshd_config - Production hardening baseline
Port 2222
AddressFamily inet
ListenAddress 0.0.0.0
# Host keys - prefer Ed25519
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
# Cryptographic hardening
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
# Authentication
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
# Session hardening
LoginGraceTime 30
MaxAuthTries 3
MaxSessions 5
ClientAliveInterval 300
ClientAliveCountMax 2
TCPKeepAlive no
# Disable unused features
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no
GatewayPorts no
# Restrict access
AllowUsers deploy ops-user
Banner /etc/ssh/banner.txt
Kritische Härtungsentscheidungen erklärt
PermitRootLogin no — Root-Login über SSH ist ein hochwertiges Ziel. Verwenden Sie einen regulären Benutzer und eskalieren Sie mit sudo. Wenn Sie unbedingt Root-äquivalenten Zugriff über einen bestimmten Schlüssel benötigen (z. B. für Automatisierung), verwenden Sie PermitRootLogin prohibit-password, um nur schlüsselbasierten Root-Login zu erlauben und gleichzeitig Passwortversuche zu blockieren.
AllowTcpForwarding no — Wenn Ihr Server kein Bastion- oder Jump-Host ist, deaktivieren Sie TCP-Weiterleitung. Ein Angreifer mit einer gültigen SSH-Sitzung könnte Ihren Server andernfalls als Proxy verwenden, um interne Netzwerkressourcen zu erreichen.
TCPKeepAlive no mit ClientAliveInterval — TCPKeepAlive arbeitet auf der TCP-Schicht und ist für Netzwerkzwischenstellen sichtbar. ClientAliveInterval sendet Keepalive-Nachrichten durch den verschlüsselten SSH-Kanal, was sowohl zuverlässiger als auch privater ist.
LoginGraceTime 30 — Reduziert das Zeitfenster, in dem eine nicht authentifizierte Verbindung einen Server-Slot belegt. Der Standard von 120 Sekunden ist übermäßig.
AllowUsers — Whitelisten Sie nur die Konten, die legitim SSH-Zugriff benötigen. Dies ist ein hartes Gate, das vor jedem Authentifizierungsversuch wirkt.
Den Standard-SSH-Port ändern
Das Verschieben von SSH von Port 22 verbessert die Sicherheit gegen einen gezielten Angreifer nicht — jeder Port-Scan wird ihn finden. Was es jedoch tut, ist das enorme Volumen automatisierter, opportunistischer Brute-Force-Bots zu eliminieren, die ausschließlich Port 22 hämmern. Dies reduziert bedeutsam das Log-Rauschen und die Serverlast.
# In /etc/ssh/sshd_config
Port 2222
Bevor Sie neu laden, öffnen Sie den neuen Port in Ihrer Firewall:
# UFW
ufw allow 2222/tcp
ufw delete allow 22/tcp
# firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
Wenn Ihr Server SELinux ausführt, müssen Sie auch den SELinux-Port-Kontext aktualisieren:
semanage port -a -t ssh_port_t -p tcp 2222
Mit einem Server verbinden
Grundlegende Verbindung
ssh user@your_server_ip
Verbindung zu einem nicht standardmäßigen Port
ssh -p 2222 user@your_server_ip
Verbindung mit einem bestimmten Schlüssel
ssh -i ~/.ssh/id_ed25519_prod user@your_server_ip
Ausführlicher Modus zum Debuggen
ssh -vvv user@your_server_ip
Das Flag -vvv gibt jeden Schritt des Handshakes, Authentifizierungsversuchs und der Kanalaushandlung aus. Es ist das erste Werkzeug, das man bei unerwarteten Verbindungsfehlern verwenden sollte.
Sichere Dateiübertragungen über SSH
SCP (Secure Copy Protocol)
SCP ist ein einfaches, nicht-interaktives Dateikopierwerkzeug. Es ist schnell und weit verbreitet, hat aber keine Wiederaufnahmefähigkeit und begrenzte Fehlerbehandlung.
Eine lokale Datei auf einen Remote-Server kopieren:
scp -P 2222 /local/path/file.tar.gz user@your_server_ip:/remote/path/
Eine Remote-Datei lokal kopieren:
scp -P 2222 user@your_server_ip:/remote/path/file.tar.gz /local/path/
Rekursives Verzeichnis kopieren:
scp -rp -P 2222 /local/directory/ user@your_server_ip:/remote/directory/
Hinweis: Das OpenSSH-Projekt hat das Legacy-SCP-Protokoll in OpenSSH 9.0 als veraltet markiert. Modernes scp verwendet jetzt standardmäßig das SFTP-Protokoll im Hintergrund. Die Befehlsschnittstelle bleibt gleich, aber der zugrunde liegende Transport ist robuster.
SFTP (SSH File Transfer Protocol)
SFTP ist ein vollwertiges Dateiübertragungssubsystem mit Verzeichnisauflistung, Berechtigungsverwaltung und Wiederaufnahmeunterstützung. Es ist die richtige Wahl für interaktives Dateimanagement.
sftp -P 2222 user@your_server_ip
Häufige SFTP-Befehle innerhalb der interaktiven Sitzung:
sftp> ls -la # List remote directory
sftp> lls # List local directory
sftp> put localfile.txt /remote/path/ # Upload file
sftp> get /remote/file.txt ./ # Download file
sftp> mput *.log /remote/logs/ # Upload multiple files
sftp> mkdir /remote/newdir # Create remote directory
sftp> chmod 640 /remote/file.txt # Change remote permissions
sftp> bye # Exit
rsync über SSH (Produktionsempfehlung)
Für die Synchronisierung von Verzeichnissen, inkrementelle Backups oder große Datensätze ist rsync über SSH deutlich effizienter als SCP oder SFTP. Es überträgt nur geänderte Blöcke, nicht ganze Dateien.
rsync -avz --progress -e "ssh -p 2222 -i ~/.ssh/id_ed25519"
/local/data/ user@your_server_ip:/remote/data/
Das Flag -z aktiviert die Komprimierung während der Übertragung. Für bereits komprimierte Daten (Archive, Images) lassen Sie es weg — die Komprimierung komprimierter Daten verschwendet CPU ohne Reduzierung der Übertragungsgröße.
SSH-Port-Weiterleitung und Tunneling
Port-Weiterleitung ist eine der leistungsstärksten und am wenigsten genutzten Fähigkeiten von SSH. Sie ermöglicht es Ihnen, sicher auf Dienste zuzugreifen, die nicht direkt dem Internet ausgesetzt sind.
Lokale Port-Weiterleitung
Einen lokalen Port zu einem Remote-Dienst weiterleiten. Beispiel: Zugriff auf eine Remote-MySQL-Instanz (Port 3306), die auf localhost auf dem Server gebunden ist:
ssh -L 3307:127.0.0.1:3306 user@your_server_ip -N
Jetzt verbindet sich mysql -h 127.0.0.1 -P 3307 auf Ihrem lokalen Rechner durch den verschlüsselten Tunnel mit dem Remote-MySQL.
Remote-Port-Weiterleitung
Einen lokalen Dienst dem Remote-Server aussetzen. Nützlich zum Testen von Webhooks oder zum Teilen eines lokalen Entwicklungsservers:
ssh -R 8080:127.0.0.1:3000 user@your_server_ip -N
Dynamische Port-Weiterleitung (SOCKS-Proxy)
Die SSH-Verbindung in einen SOCKS5-Proxy umwandeln und beliebigen TCP-Datenverkehr durch den Server leiten:
ssh -D 1080 user@your_server_ip -N
Konfigurieren Sie Ihren Browser oder Ihre Anwendung für die Verwendung von SOCKS5 127.0.0.1:1080.
SSH-Agent und Agent-Weiterleitung
ssh-agent hält entschlüsselte private Schlüssel im Speicher, sodass Sie Ihre Passphrase nicht bei jeder Verbindung erneut eingeben müssen.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Agent-Weiterleitung (ssh -A) ermöglicht es einem Remote-Server, Ihren lokalen Agent zur Authentifizierung bei einem dritten Server zu verwenden. Dies ist nützlich für Bastion-Host-Architekturen, birgt jedoch Risiken: Ein Root-Benutzer auf dem Zwischenserver kann Ihren weitergeleiteten Agent-Socket verwenden. Bevorzugen Sie stattdessen ProxyJump:
ssh -J bastion.example.com user@internal-server.example.com
ProxyJump leitet die TCP-Verbindung durch den Bastion, ohne Ihren Agent diesem auszusetzen.
Häufige SSH-Probleme beheben
Verbindung verweigert (ssh: connect to host ... port 22: Connection refused)
Systematische Diagnose:
Überprüfen Sie, ob der SSH-Daemon läuft: systemctl status sshdss -tlnp | grep sshdufw status oder iptables -L -n | grep 22ping your_server_ipZugriff verweigert (publickey)
Dies ist der häufigste SSH-Fehler. Arbeiten Sie diese Checkliste durch:
# On the server, check authorized_keys permissions
ls -la ~/.ssh/
stat ~/.ssh/authorized_keys
# Fix permissions if wrong
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
# Verify the public key is actually present
cat ~/.ssh/authorized_keys
# Check sshd logs for the specific rejection reason
journalctl -u sshd -n 50 --no-pager
# or
tail -50 /var/log/auth.logHäufige Ursachen jenseits von Berechtigungen:
- Die
authorized_keys-Datei enthält den falschen Schlüssel (z. B. haben Sie den privaten Schlüssel anstelle der.pub-Datei kopiert).
StrictModes yes in sshd_config (der Standard) lehnt Verbindungen ab, wenn die Home-Verzeichnis-Berechtigungen zu offen sind — chmod 755 ~ ist das maximal erlaubte.
AllowUsers oder AllowGroups in sshd_config schließt den verbindenden Benutzer aus.
SELinux blockiert den Zugriff auf ~/.ssh/ — überprüfen Sie ausearch -m avc -ts recent.
SSH-Verbindungs-Timeout
# In /etc/ssh/sshd_config (server side)
ClientAliveInterval 60
ClientAliveCountMax 3
# In ~/.ssh/config (client side)
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ClientAliveInterval sendet alle 60 Sekunden ein Null-Paket durch den verschlüsselten Kanal. Nach ClientAliveCountMax aufeinanderfolgenden verpassten Antworten beendet der Server die Verbindung. Dies verhindert die Ansammlung von Zombie-Sitzungen.
Host-Key-Verifizierung fehlgeschlagen
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Diese Warnung bedeutet, dass der Host-Key des Servers nicht mehr mit dem in ~/.ssh/known_hosts gespeicherten übereinstimmt. Legitime Ursachen umfassen die Neuinstallation des Servers oder die Neuzuweisung von IP-Adressen. Böswillige Ursachen umfassen einen Man-in-the-Middle-Angriff. Untersuchen Sie dies, bevor Sie fortfahren.
Wenn Sie bestätigt haben, dass der Server legitim neu installiert wurde:
ssh-keygen -R your_server_ip
Verbinden Sie sich dann erneut und überprüfen Sie den neuen Host-Key-Fingerabdruck anhand der Serverkonsole oder des Anbieter-Dashboards, bevor Sie ihn akzeptieren.
Multi-Faktor-Authentifizierung für SSH
Schlüsselbasierte Authentifizierung ist stark, aber das Hinzufügen eines TOTP (Time-based One-Time Password) zweiten Faktors schafft Defense-in-Depth. Selbst wenn ein privater Schlüssel und seine Passphrase kompromittiert werden, kann ein Angreifer ohne den TOTP-Token nicht authentifizieren.
Installieren und konfigurieren Sie libpam-google-authenticator auf dem Server:
apt install libpam-google-authenticator
google-authenticator
Konfigurieren Sie dann PAM und sshd_config:
# /etc/pam.d/sshd - add this line
auth required pam_google_authenticator.so
# /etc/ssh/sshd_config
UsePAM yes
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
Mit AuthenticationMethods publickey,keyboard-interactive muss ein Benutzer einen gültigen Schlüssel UND einen TOTP-Code angeben. Dies ist die korrekte Produktionskonfiguration für hochwertige Server.
SSH Certificate Authority: Schlüsselverwaltung skalieren
In Umgebungen mit Dutzenden von Servern und mehreren Administratoren wird die Verwaltung einzelner authorized_keys-Einträge betrieblich nicht nachhaltig. SSH-Zertifikate lösen dies.
Eine SSH Certificate Authority (CA) signiert Benutzer- und Host-Schlüssel. Server vertrauen dem öffentlichen Schlüssel der CA anstelle einzelner Benutzerschlüssel. Das Hinzufügen eines neuen Administrators erfordert nur das Signieren seines öffentlichen Schlüssels — keine Änderungen an der authorized_keys-Datei eines Servers.
# Create a CA key pair (store the private key offline or in a secrets manager)
ssh-keygen -t ed25519 -f /etc/ssh/ca_key -C "infrastructure-ca-2025"
# Sign a user's public key, valid for 7 days, for specific principals
ssh-keygen -s /etc/ssh/ca_key
-I "alice-ops-cert"
-n alice,deploy
-V +7d
~/.ssh/id_ed25519.pub
Konfigurieren Sie auf jedem Server das Vertrauen für die CA:
# /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/ca_key.pub
So verwalten groß angelegte Infrastrukturen (einschließlich Cloud-Anbieter und Unternehmen) den SSH-Zugriff ohne serverseitige Schlüsselverwaltung.
Praktische Entscheidungsmatrix: SSH-Konfiguration nach Anwendungsfall
Anwendungsfall
Schlüsseltyp
Port
Passwort-Auth
Root-Login
Weiterleitung
MFA
—
—
—
—
—
—
—
Persönlicher VPS
Ed25519
2222+
Deaktiviert
Verboten
Deaktiviert
Optional
Produktions-Webserver
Ed25519
Nicht-Standard
Deaktiviert
Nein
Deaktiviert
Erforderlich
Bastion / Jump-Host
Ed25519
22 oder benutzerdefiniert
Deaktiviert
Nein
Kontrolliert
Erforderlich
CI/CD-Automatisierung
Ed25519 (Deploy-Schlüssel)
Nicht-Standard
Deaktiviert
Nein
Deaktiviert
Nein (nur Schlüssel)
Datenbankserver
Ed25519
Nicht-Standard
Deaktiviert
Nein
Nur lokal
Erforderlich
Entwicklungsserver
Ed25519
Standard oder benutzerdefiniert
Optional
Nein
Optional
Optional
SSH auf AlexHost-Infrastruktur einrichten
Wenn Sie einen VPS oder dedizierten Server über AlexHost bereitstellen, ist SSH-Zugriff standardmäßig konfiguriert. Das anfängliche Root-Passwort wird per Bereitstellungs-E-Mail geliefert, und die empfohlene erste Maßnahme ist:
Als Root einloggen, einen Nicht-Root-Administrationsbenutzer erstellen und Ihren öffentlichen Schlüssel zur ~/.ssh/authorized_keys dieses Benutzers hinzufügen.
Die oben dokumentierte sshd_config-Härtungsbasislinie anwenden.
Passwortauthentifizierung und Root-Login deaktivieren.
Ihre Firewall konfigurieren, um den SSH-Zugriff auf bekannte IP-Bereiche zu beschränken, wo betrieblich machbar.
Wenn Sie eine grafische Verwaltungsebene neben SSH bevorzugen, bieten AlexHosts VPS mit cPanel und VPS Control Panels-Optionen eine Weboberfläche für häufige Aufgaben, während SSH für die vollständige administrative Kontrolle verfügbar bleibt.
Für Umgebungen, in denen Sie Webanwendungen auf demselben Server sichern müssen, deckt die Kombination von SSH-Härtung mit einem ordnungsgemäß konfigurierten SSL-Zertifikat sowohl die administrativen als auch die Anwendungstransportschichten ab.
Technische Schlüssel-Takeaway-Checkliste
Bevor Sie Ihre SSH-Konfiguration als produktionsbereit betrachten, überprüfen Sie jedes der folgenden:
Schlüsselverwaltung
Private Schlüssel verwenden Ed25519 oder RSA-4096 als Minimum
Alle privaten Schlüssel sind mit einer starken Passphrase geschützt
Das ~/.ssh/-Verzeichnis hat 700-Berechtigungen; authorized_keys hat 600restrict– und command=-Optionen wo anwendbarServerkonfiguration
PasswordAuthentication noist gesetzt und aktivPermitRootLogin nooderprohibit-passwordist durchgesetzt- SSH läuft auf einem nicht standardmäßigen Port mit aktualisierten Firewall-Regeln
AllowUsersoderAllowGroupsbeschränkt den Zugriff auf benannte KontenLoginGraceTimeist auf 30 Sekunden oder weniger gesetztsshd -tbesteht ohne Fehler nach jeder Konfigurationsänderung
Kryptografische Härtung
KexAlgorithmsschließtdiffie-hellman-group1-sha1unddiffie-hellman-group14-sha1ausCiphersschließt3des-cbc,arcfourundblowfish-cbcausMACsverwendet nur-etm-Varianten (Encrypt-then-MAC)
Betriebssicherheit
- SSH-Authentifizierungslogs werden überwacht (
/var/log/auth.logoderjournalctl -u sshd) fail2banoder Äquivalent ist konfiguriert, um wiederholte Authentifizierungsfehler zu blockieren- Host-Key-Fingerabdrücke sind aufgezeichnet und außerhalb des Bandes zur Verifizierung gespeichert
- MFA ist für alle interaktiven Benutzersitzungen auf Produktionssystemen aktiviert
- SSH CA wird für Umgebungen mit mehr als fünf Servern oder drei Administratoren verwendet
FAQ
Was ist der Unterschied zwischen SSH-Schlüsseln und SSH-Zertifikaten?
SSH-Schlüssel erfordern, dass jeder Server den öffentlichen Schlüssel des Benutzers in authorized_keys speichert. SSH-Zertifikate werden von einer Certificate Authority signiert; Server vertrauen der CA anstelle einzelner Schlüssel. Zertifikate skalieren auf große Flotten ohne serverseitige Schlüsselverwaltung und unterstützen Ablaufzeiten, was den Widerruf unkompliziert macht.
Warum erscheint Permission denied (publickey) auch wenn der Schlüssel korrekt ist?
Die häufigsten Ursachen sind falsche Dateiberechtigungen auf ~/.ssh/ (muss 700 sein) oder authorized_keys (muss 600 sein), ein Home-Verzeichnis, das world-writable ist (blockiert durch StrictModes), oder eine AllowUsers-Direktive in sshd_config, die das verbindende Konto ausschließt. Überprüfen Sie journalctl -u sshd auf dem Server für den spezifischen Ablehnungsgrund.
Ist das Ändern des SSH-Ports von 22 eine echte Sicherheitsmaßnahme?
Es eliminiert automatisierte opportunistische Angriffe, die auf Port 22 abzielen, was das Log-Rauschen und fehlgeschlagene Authentifizierungsversuche bedeutsam reduziert. Es schützt nicht gegen einen gezielten Angreifer, der einen Port-Scan durchführt. Es sollte mit fail2ban, schlüsselbasierter Authentifizierung und Firewall-IP-Allowlisting für eine bedeutsame Sicherheitsverbesserung kombiniert werden.
Kann ich SSH ohne eine statische IP-Adresse auf der Client-Seite verwenden?
Ja. Schlüsselbasierte Authentifizierung erfordert keine feste Client-IP. Wenn Sie nach IP einschränken möchten, verwenden Sie die Option from= in authorized_keys oder Firewall-Regeln. Für dynamische IPs sollten Sie ein VPN in Betracht ziehen, um eine stabile Netzwerkidentität herzustellen, bevor Sie sich verbinden, anstatt SSH für das gesamte Internet zu öffnen.
Was ist der sicherste Weg, den SSH-Zugriff wiederherzustellen, wenn ich ausgesperrt bin?
Greifen Sie auf den Server über die Out-of-Band-Konsole Ihres Hosting-Anbieters zu (VNC, IPMI oder KVM over IP). Mounten Sie von dort das Dateisystem, korrigieren Sie das sshd_config– oder authorized_keys-Problem und starten Sie den SSH-Daemon neu. Bei AlexHost-VPS– und dedizierten Server-Plänen ist die Anbieterkonsole über das Client-Portal verfügbar und hängt nicht davon ab, dass SSH funktionsfähig ist.
