15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
10.10.2024

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-interactive oder gssapi-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:

  1. TCP-Verbindung wird zum Server auf dem konfigurierten Port hergestellt.
  2. Versionsaustausch — Client und Server tauschen Protokollversionszeichenfolgen aus (SSH-2.0-OpenSSH_9.x).
  3. 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.
  4. 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.
  5. 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.
  6. Verschlüsselung aktiviert — der gesamte nachfolgende Datenverkehr wird mit der ausgehandelten Chiffre (z. B. chacha20-poly1305) und MAC verschlüsselt und integritätsgeschützt.
  7. 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.
  8. 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 RolleAlgorithmustypZweck
SchlüsselaustauschAsymmetrisch (ECDH, DH)Gemeinsames Sitzungsgeheimnis ableiten, ohne es zu übertragen
SitzungsverschlüsselungSymmetrisch (AES-GCM, ChaCha20)Massendaten effizient verschlüsseln
ServerauthentifizierungAsymmetrisch (RSA, Ed25519, ECDSA)Serveridentität über Host-Key-Signatur nachweisen
Client-AuthentifizierungAsymmetrisch (RSA, Ed25519)Client-Identität über Schlüsselpaar-Herausforderung nachweisen
IntegritätsverifizierungHMAC (SHA-256, SHA-512) oder AEADManipulation verschlüsselter Pakete erkennen

SSH vs. Legacy-Fernzugriffsprotokolle

FunktionSSHTelnetFTPRDP
VerschlüsselungVollständig (Transport + Auth)KeineKeine (Daten); optionales TLSTLS/RC4
AuthentifizierungPasswort, Schlüsselpaar, Zertifikat, GSSAPIPasswort (Klartext)Passwort (Klartext)Passwort, Smartcard, NLA
Port22 (konfigurierbar)2321 (Steuerung), 20 (Daten)3389
DateiübertragungSFTP, SCP integriertNeinJa (unsicher)Zwischenablage/Laufwerk-Umleitung
Port-WeiterleitungJa (lokal, remote, dynamisch)NeinNeinEingeschränkt
MFA-UnterstützungJa (über PAM, TOTP)NeinSeltenJa
Firewall-DurchquerungEinzelner TCP-PortEinzelner TCP-PortErfordert Passivmodus-KonfigurationEinzelner TCP-Port
Primärer AnwendungsfallLinux/Unix-ServeradministrationLegacy-SystemeDateiü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 sshd
  • Bestätigen Sie den Listening-Port: ss -tlnp | grep sshd
  • Überprüfen Sie Firewall-Regeln: ufw status oder iptables -L -n | grep 22
  • Überprüfen Sie, ob der Server auf Netzwerkebene erreichbar ist: ping your_server_ip
  • Wenn Sie einen Cloud-Anbieter verwenden, überprüfen Sie die Sicherheitsgruppen- oder Netzwerk-ACL-Regeln in der Anbieterkonsole.
  • Zugriff 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.log

    Hä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 600
    • Deploy-Schlüssel verwenden restrict– und command=-Optionen wo anwendbar
    • Schlüsselrotationsplan ist dokumentiert und durchgesetzt

    Serverkonfiguration

    • PasswordAuthentication no ist gesetzt und aktiv
    • PermitRootLogin no oder prohibit-password ist durchgesetzt
    • SSH läuft auf einem nicht standardmäßigen Port mit aktualisierten Firewall-Regeln
    • AllowUsers oder AllowGroups beschränkt den Zugriff auf benannte Konten
    • LoginGraceTime ist auf 30 Sekunden oder weniger gesetzt
    • sshd -t besteht ohne Fehler nach jeder Konfigurationsänderung

    Kryptografische Härtung

    • KexAlgorithms schließt diffie-hellman-group1-sha1 und diffie-hellman-group14-sha1 aus
    • Ciphers schließt 3des-cbc, arcfour und blowfish-cbc aus
    • MACs verwendet nur -etm-Varianten (Encrypt-then-MAC)

    Betriebssicherheit

    • SSH-Authentifizierungslogs werden überwacht (/var/log/auth.log oder journalctl -u sshd)
    • fail2ban oder Ä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.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen