sammlung:ssh
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
SSH (Secure Shell)
SSH ist ein verschlüsseltes Netzwerkprotokoll für die sichere Fernverwaltung von Computern und die sichere Datenübertragung über unsichere Netzwerke. Es wird hauptsächlich für Remote-Login, Dateitransfer und Tunnel verwendet.
SSH installieren
Debian/Ubuntu
# SSH-Server installieren sudo apt update sudo apt install openssh-server # SSH-Client installieren (meist bereits installiert) sudo apt install openssh-client # Status prüfen sudo systemctl status ssh
RHEL/CentOS/Fedora
# SSH-Server installieren sudo dnf install openssh-server # SSH-Client installieren sudo dnf install openssh-clients # Status prüfen sudo systemctl status sshd
openSUSE
# SSH-Server installieren sudo zypper install openssh # Status prüfen sudo systemctl status sshd
Arch Linux
# SSH-Server installieren sudo pacman -S openssh # Status prüfen sudo systemctl status sshd
SSH-Dienst verwalten
# SSH-Dienst starten sudo systemctl start sshd # RHEL/Fedora/openSUSE/Arch sudo systemctl start ssh # Debian/Ubuntu # Automatischer Start beim Booten sudo systemctl enable sshd # RHEL/Fedora/openSUSE/Arch sudo systemctl enable ssh # Debian/Ubuntu # SSH-Dienst neu starten (nach Konfigurationsänderungen) sudo systemctl restart sshd sudo systemctl restart ssh # SSH-Dienst stoppen sudo systemctl stop sshd sudo systemctl stop ssh
SSH-Dateien Server
Hauptkonfigurationsdatei
/etc/ssh/sshd_config # SSH-Server-Hauptkonfiguration
Wichtige Optionen in `/etc/ssh/sshd_config`:
Port 22 # Standard-SSH-Port ListenAddress 0.0.0.0 # Auf allen Interfaces lauschen PermitRootLogin no # Root-Login verbieten (empfohlen) PasswordAuthentication yes # Passwort-Login erlauben PubkeyAuthentication yes # Public-Key-Authentifizierung erlauben AuthorizedKeysFile .ssh/authorized_keys # Pfad zu autorisierten Schlüsseln X11Forwarding yes # X11-Forwarding erlauben MaxAuthTries 3 # Maximale Anmeldeversuche ClientAliveInterval 300 # Keep-Alive in Sekunden AllowUsers user1 user2 # Nur bestimmte Benutzer erlauben DenyUsers baduser # Bestimmte Benutzer verbieten
Host-Schlüssel
/etc/ssh/ssh_host_rsa_key # RSA Host-Schlüssel (privat) /etc/ssh/ssh_host_rsa_key.pub # RSA Host-Schlüssel (öffentlich) /etc/ssh/ssh_host_ecdsa_key # ECDSA Host-Schlüssel (privat) /etc/ssh/ssh_host_ecdsa_key.pub # ECDSA Host-Schlüssel (öffentlich) /etc/ssh/ssh_host_ed25519_key # ED25519 Host-Schlüssel (privat) /etc/ssh/ssh_host_ed25519_key.pub # ED25519 Host-Schlüssel (öffentlich)
Weitere Konfigurationsdateien
/etc/ssh/sshd_config.d/ # Zusätzliche Server-Konfigurationen /etc/ssh/ssh_config # Globale Client-Konfiguration /etc/ssh/ssh_config.d/ # Zusätzliche Client-Konfigurationen
Logs
/var/log/auth.log # SSH-Login-Logs (Debian/Ubuntu) /var/log/secure # SSH-Login-Logs (RHEL/CentOS) # Logs anzeigen sudo tail -f /var/log/auth.log sudo journalctl -u sshd -f
SSH-Dateien User
User-Verzeichnis
~/.ssh/ # User-SSH-Verzeichnis ~/.ssh/id_rsa # Privater RSA-Schlüssel ~/.ssh/id_rsa.pub # Öffentlicher RSA-Schlüssel ~/.ssh/id_ed25519 # Privater ED25519-Schlüssel (empfohlen) ~/.ssh/id_ed25519.pub # Öffentlicher ED25519-Schlüssel ~/.ssh/authorized_keys # Autorisierte öffentliche Schlüssel (Server) ~/.ssh/known_hosts # Bekannte Host-Schlüssel ~/.ssh/config # User-SSH-Client-Konfiguration
Berechtigungen setzen (wichtig!)
# Korrekte Berechtigungen für .ssh-Verzeichnis chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub chmod 600 ~/.ssh/authorized_keys chmod 644 ~/.ssh/known_hosts chmod 600 ~/.ssh/config
User-SSH-Config
# ~/.ssh/config
Host myserver
HostName 192.168.1.100
User username
Port 22
IdentityFile ~/.ssh/id_ed25519
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_github
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
SSH-Key erstellen
ED25519-Schlüssel erstellen (empfohlen)
# Neuen ED25519-Schlüssel erstellen ssh-keygen -t ed25519 -C "user@email.com" # Mit eigenem Dateinamen ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_custom -C "user@email.com" # Ohne Passphrase (nicht empfohlen für produktive Systeme) ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
RSA-Schlüssel erstellen (4096 Bit)
# RSA mit 4096 Bit (sicherer als Standard 2048) ssh-keygen -t rsa -b 4096 -C "user@email.com" # Mit eigenem Dateinamen ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_custom -C "user@email.com"
ECDSA-Schlüssel erstellen
# ECDSA mit 521 Bit ssh-keygen -t ecdsa -b 521 -C "user@email.com"
Interaktiver Prozess
# Beim Erstellen werden Sie gefragt: # 1. Speicherort (Enter für Standard: ~/.ssh/id_ed25519) # 2. Passphrase (empfohlen für Sicherheit) # 3. Passphrase wiederholen # Beispiel-Ausgabe: Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_ed25519 Your public key has been saved in /home/user/.ssh/id_ed25519.pub The key fingerprint is: SHA256:... user@email.com
Öffentlichen Schlüssel anzeigen
# Öffentlichen Schlüssel anzeigen cat ~/.ssh/id_ed25519.pub cat ~/.ssh/id_rsa.pub # Fingerprint anzeigen ssh-keygen -lf ~/.ssh/id_ed25519.pub ssh-keygen -lf ~/.ssh/id_rsa.pub
SSH-Key verwalten
Öffentlichen Schlüssel auf Server kopieren
# Automatisch mit ssh-copy-id (empfohlen) ssh-copy-id user@server ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server # Mit spezifischem Port ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server # Manuell (wenn ssh-copy-id nicht verfügbar) cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" # Oder mit scp scp ~/.ssh/id_ed25519.pub user@server:~/.ssh/authorized_keys # Berechtigungen auf Server prüfen ssh user@server "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
SSH-Agent verwenden
# SSH-Agent starten eval "$(ssh-agent -s)" # Schlüssel zum Agent hinzufügen ssh-add ~/.ssh/id_ed25519 ssh-add ~/.ssh/id_rsa # Schlüssel mit Timeout hinzufügen (1 Stunde) ssh-add -t 3600 ~/.ssh/id_ed25519 # Geladene Schlüssel anzeigen ssh-add -l # Alle Schlüssel aus Agent entfernen ssh-add -D # Spezifischen Schlüssel entfernen ssh-add -d ~/.ssh/id_ed25519
Passphrase ändern
# Passphrase eines bestehenden Schlüssels ändern ssh-keygen -p -f ~/.ssh/id_ed25519 # Passphrase entfernen (leer lassen) ssh-keygen -p -f ~/.ssh/id_ed25519 -N ""
Schlüssel konvertieren
# Öffentlichen Schlüssel aus privatem generieren ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub # PEM-Format konvertieren (für ältere Systeme) ssh-keygen -p -f ~/.ssh/id_rsa -m pem
Autorisierte Schlüssel verwalten
# authorized_keys auf Server cat ~/.ssh/authorized_keys # Alle autorisierten Schlüssel anzeigen # Schlüssel hinzufügen echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys # Optionen für Schlüssel # no-port-forwarding,no-X11-forwarding ssh-ed25519 AAAA... # from="192.168.1.0/24" ssh-ed25519 AAAA... # command="/usr/bin/backup.sh" ssh-ed25519 AAAA... # Duplikate entfernen und sortieren sort -u ~/.ssh/authorized_keys -o ~/.ssh/authorized_keys
Schlüssel testen
# Verbindung mit spezifischem Schlüssel testen ssh -i ~/.ssh/id_ed25519 user@server # Verbose-Modus für Debugging ssh -v user@server ssh -vv user@server # Mehr Details ssh -vvv user@server # Maximum Details # Nur Authentifizierung testen (ohne Shell) ssh -T user@server
Bekannte Hosts verwalten
# Host aus known_hosts entfernen (bei Hostkey-Änderung) ssh-keygen -R hostname ssh-keygen -R 192.168.1.100 # Bekannte Hosts anzeigen cat ~/.ssh/known_hosts # Hostkey vorab hinzufügen ssh-keyscan hostname >> ~/.ssh/known_hosts ssh-keyscan -H hostname >> ~/.ssh/known_hosts # Mit Hash
Mehrere SSH-Keys verwalten
# In ~/.ssh/config verschiedene Keys für verschiedene Hosts
Host work
HostName work.example.com
User workuser
IdentityFile ~/.ssh/id_work
Host personal
HostName personal.example.com
User homeuser
IdentityFile ~/.ssh/id_personal
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_github_work
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_github_personal
SSH-Verbindung herstellen
Grundlegende Verbindung
# Standard-Verbindung ssh user@hostname ssh user@192.168.1.100 # Mit spezifischem Port ssh -p 2222 user@hostname # Mit spezifischem Schlüssel ssh -i ~/.ssh/id_custom user@hostname # Befehl auf Remote-System ausführen ssh user@hostname "ls -la" ssh user@hostname "sudo systemctl status nginx"
Port-Forwarding
# Lokalen Port weiterleiten (Local Port Forwarding) ssh -L 8080:localhost:80 user@server # Dann http://localhost:8080 im Browser öffnen # Remote Port Forwarding ssh -R 8080:localhost:80 user@server # Dynamic Port Forwarding (SOCKS-Proxy) ssh -D 1080 user@server
X11-Forwarding
# X11-Anwendungen remote ausführen ssh -X user@server ssh -Y user@server # Trusted X11 Forwarding (weniger sicher) # Beispiel: Firefox remote starten ssh -X user@server firefox
SSH-Tunneling
# SSH-Tunnel im Hintergrund ssh -fN -L 3306:localhost:3306 user@server # -f: Im Hintergrund # -N: Keine Remote-Befehle ausführen
SSH absichern
Server-Konfiguration härten
# /etc/ssh/sshd_config bearbeiten sudo nano /etc/ssh/sshd_config # Empfohlene Sicherheitseinstellungen: Port 2222 # Nicht-Standard-Port PermitRootLogin no # Root-Login verbieten PasswordAuthentication no # Nur Key-basierte Auth PubkeyAuthentication yes # Public-Key-Auth aktivieren PermitEmptyPasswords no # Leere Passwörter verbieten MaxAuthTries 3 # Max. Anmeldeversuche LoginGraceTime 30 # Timeout für Login AllowUsers user1 user2 # Nur bestimmte User erlauben Protocol 2 # Nur SSH-2-Protokoll X11Forwarding no # X11 deaktivieren (wenn nicht benötigt) AllowTcpForwarding no # Port-Forwarding deaktivieren (optional) # Nach Änderungen neu starten sudo systemctl restart sshd
Fail2Ban einrichten
# Fail2Ban installieren (automatische IP-Sperre nach Fehlversuchen) sudo apt install fail2ban # Debian/Ubuntu sudo dnf install fail2ban # Fedora/RHEL sudo zypper install fail2ban # openSUSE # Konfiguration sudo nano /etc/fail2ban/jail.local [sshd] enabled = true port = 22 maxretry = 3 bantime = 3600 findtime = 600 # Fail2Ban starten sudo systemctl enable fail2ban sudo systemctl start fail2ban # Status prüfen sudo fail2ban-client status sshd
Firewall-Regeln
# UFW (Debian/Ubuntu) sudo ufw allow 22/tcp sudo ufw allow from 192.168.1.0/24 to any port 22 # Nur aus lokalem Netz # firewalld (RHEL/Fedora) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload # iptables sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Zwei-Faktor-Authentifizierung (2FA)
# Google Authenticator installieren sudo apt install libpam-google-authenticator # Als User konfigurieren google-authenticator # PAM konfigurieren sudo nano /etc/pam.d/sshd # Zeile hinzufügen: auth required pam_google_authenticator.so # sshd_config anpassen sudo nano /etc/ssh/sshd_config ChallengeResponseAuthentication yes sudo systemctl restart sshd
SSH-Troubleshooting
Verbindungsprobleme diagnostizieren
# Verbose-Modus für detaillierte Ausgabe ssh -vvv user@server # SSH-Dienst-Status prüfen sudo systemctl status sshd # Port-Verfügbarkeit testen telnet hostname 22 nc -zv hostname 22 # Firewall prüfen sudo ufw status sudo firewall-cmd --list-all sudo iptables -L # Logs überprüfen sudo tail -f /var/log/auth.log # Debian/Ubuntu sudo tail -f /var/log/secure # RHEL/CentOS sudo journalctl -u sshd -f
Häufige Fehler
# "Permission denied (publickey)" # Lösung: Berechtigungen prüfen chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub chmod 600 ~/.ssh/authorized_keys # "Host key verification failed" # Lösung: Host aus known_hosts entfernen ssh-keygen -R hostname # "Connection refused" # Lösung: SSH-Dienst läuft nicht oder Firewall blockiert sudo systemctl start sshd sudo ufw allow 22 # "Too many authentication failures" # Lösung: Weniger Schlüssel im SSH-Agent oder IdentitiesOnly verwenden ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 user@server
Konfiguration testen
# SSH-Config-Syntax testen sudo sshd -t # Extended Test mit Konfigurationsausgabe sudo sshd -T # SSH-Client-Konfiguration testen ssh -G hostname
Best Practices
- ED25519-Schlüssel verwenden - Moderner, sicherer und schneller als RSA
- Passphrase für Schlüssel - Privaten Schlüssel mit Passphrase schützen
- SSH-Agent nutzen - Bequemes Arbeiten mit geschützten Schlüsseln
- Root-Login deaktivieren - PermitRootLogin no in sshd_config
- Key-basierte Authentifizierung - Passwort-Login deaktivieren
- Nicht-Standard-Port - SSH-Port ändern (z.B. 2222)
- Fail2Ban installieren - Automatischer Schutz vor Brute-Force
- Regelmäßige Updates - OpenSSH aktuell halten
- Berechtigungen prüfen - .ssh-Verzeichnis und Dateien korrekt setzen
- Firewall konfigurieren - Nur notwendige Zugriffe erlauben
- Logs überwachen - Verdächtige Aktivitäten erkennen
- Backup der Schlüssel - Private Schlüssel sicher aufbewahren
Siehe auch
Weitere Informationen
man ssh man sshd man sshd_config man ssh-keygen man ssh-copy-id man ssh-agent man ssh-add
sammlung/ssh.1767701641.txt.gz · Zuletzt geändert: von Branislav Zeljak
