SSH / Fernwartung

Was ist SSH?

SSH (Secure Shell) ist das Standard-Protokoll für sichere verschlüsselte Fernzugriffe auf Linux-Server. Es ersetzt die unsicheren Vorgänger Telnet und rlogin die Daten (inkl. Passwörter) im Klartext übertrugen. SSH läuft standardmäßig auf TCP-Port 22.

SSH bietet:

  • Verschlüsselte Verbindung: Alle Daten werden verschlüsselt übertragen

  • Authentifizierung: Per Passwort oder Public-Key-Verfahren

  • Port-Forwarding: Tunnel für andere Protokolle

  • Dateiübertragung: SFTP und SCP basieren auf SSH

SSH-Client – Verbindung aufbauen

# Grundlegende Verbindung
ssh benutzer@192.168.1.10

# Anderer Port
ssh -p 2222 benutzer@server.fisipedia.de

# Mit privatem Schlüssel
ssh -i ~/.ssh/mein_key benutzer@server.fisipedia.de

# Befehl remote ausführen ohne interaktive Sitzung
ssh benutzer@server "systemctl status nginx"

# X11-Weiterleitung (GUI-Anwendungen über SSH)
ssh -X benutzer@server

SSH-Schlüsselpaar-Authentifizierung

Die Authentifizierung per Public/Private Key ist sicherer als Passwörter und ermöglicht passwortlosen Login – wichtig für Automatisierung und Scripts.

Funktionsprinzip:

  1. Client generiert ein Schlüsselpaar: Private Key (geheim, bleibt beim Client) und Public Key (öffentlich, wird auf dem Server hinterlegt)

  2. Server verschlüsselt eine Herausforderung mit dem Public Key

  3. Client entschlüsselt sie mit dem Private Key – Beweis der Identität ohne Passwortübertragung

# Schlüsselpaar generieren (Ed25519 – modern und sicher)
ssh-keygen -t ed25519 -C "kommentar@fisipedia.de"

# Älter aber weit verbreitet (RSA mit 4096 Bit)
ssh-keygen -t rsa -b 4096

# Public Key auf Server kopieren
ssh-copy-id benutzer@server.fisipedia.de

# Manuell: Public Key in authorized_keys eintragen
cat ~/.ssh/id_ed25519.pub | ssh benutzer@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Speicherorte:

  • ~/.ssh/id_ed25519 – Private Key (Berechtigung: 600 – nur Eigentümer darf lesen)

  • ~/.ssh/id_ed25519.pub – Public Key

  • ~/.ssh/authorized_keys – Auf dem Server: autorisierte Public Keys

  • ~/.ssh/known_hosts – Bekannte Server-Fingerprints

SSH-Server konfigurieren

Der SSH-Server-Daemon heißt sshd. Konfigurationsdatei: /etc/ssh/sshd_config

# Wichtige Konfigurationsoptionen in /etc/ssh/sshd_config:

# Port ändern (Security by Obscurity)
Port 2222

# Root-Login verbieten (empfohlen)
PermitRootLogin no

# Passwort-Authentifizierung deaktivieren (nur Key-Auth)
PasswordAuthentication no

# Nur bestimmte Benutzer erlauben
AllowUsers deploy sysadmin

# Maximale Fehlversuche
MaxAuthTries 3

# Inaktive Verbindungen beenden
ClientAliveInterval 300
ClientAliveCountMax 2
# Nach Konfigurationsänderungen:
systemctl reload sshd

# Konfiguration vorab testen
sshd -t

SSH-Härtung – Best Practices

  • Root-Login deaktivieren: PermitRootLogin no – stattdessen normalen User + sudo

  • Passwort-Auth deaktivieren: PasswordAuthentication no – nur Key-Authentifizierung

  • Port ändern: Von 22 auf einen anderen Port – reduziert automatisierte Scans

  • Fail2ban: Sperrt IPs nach zu vielen Fehlversuchen automatisch

  • AllowUsers/AllowGroups: Nur bestimmte Benutzer dürfen sich anmelden

Dateiübertragung mit SCP und SFTP

SCP (Secure Copy Protocol) überträgt Dateien über SSH:

# Datei vom lokalen System auf Server kopieren
scp datei.txt benutzer@server:/home/benutzer/

# Datei vom Server herunterladen
scp benutzer@server:/var/log/nginx/access.log .

# Verzeichnis rekursiv kopieren
scp -r /lokaler/ordner benutzer@server:/ziel/

# Mit SSH-Schlüssel
scp -i ~/.ssh/mein_key datei.txt benutzer@server:/home/benutzer/

SFTP (SSH File Transfer Protocol) bietet eine interaktive FTP-ähnliche Sitzung:

# SFTP-Sitzung öffnen
sftp benutzer@server

# Im SFTP:
ls          # Verzeichnis auflisten
put datei   # Datei hochladen
get datei   # Datei herunterladen
exit

rsync ist das mächtigste Tool für Dateiübertragung – überträgt nur Änderungen:

# Lokales Verzeichnis auf Server synchronisieren
rsync -avz /lokaler/ordner/ benutzer@server:/ziel/

# Mit SSH als Transport
rsync -avz -e ssh /lokaler/ordner/ benutzer@server:/ziel/

# Löschen von Dateien auf dem Ziel die lokal nicht mehr existieren
rsync -avz --delete /lokaler/ordner/ benutzer@server:/ziel/

SSH-Tunnel und Port-Forwarding

SSH kann als verschlüsselter Tunnel für andere Protokolle dienen:

# Local Port Forwarding:
# Lokaler Port 8080 → Remote-Server Port 80
ssh -L 8080:localhost:80 benutzer@server
# Danach: http://localhost:8080 erreicht den Webserver auf dem Remote-Server

# Remote Port Forwarding:
# Port auf Remote-Server → lokalen Port weiterleiten
ssh -R 9090:localhost:3000 benutzer@server

# Dynamic Port Forwarding (SOCKS-Proxy)
ssh -D 1080 benutzer@server

SSH-Config-Datei

Mit ~/.ssh/config können Verbindungen einfacher gestaltet werden:

# ~/.ssh/config

Host webserver
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/webserver_key
    Port 2222

Host jumphost
    HostName jump.fisipedia.de
    User sysadmin
    IdentityFile ~/.ssh/jump_key
# Verbindung mit Alias aufbauen
ssh webserver   # entspricht: ssh -i ~/.ssh/webserver_key -p 2222 deploy@192.168.1.100

Zusammenfassung

  • SSH: verschlüsselter Remote-Zugriff – Port 22 (TCP), ersetzt Telnet

  • Key-Authentifizierung: sicherer als Passwort – ssh-keygen + ssh-copy-id

  • Ed25519 ist der empfohlene Schlüsseltyp (moderner, sicherer als RSA)

  • sshd-Härtung: Root-Login und Passwort-Auth deaktivieren

  • Dateitransfer: SCP (einfach), SFTP (interaktiv), rsync (effizient, nur Änderungen)

  • SSH-Tunnel für Port-Forwarding anderer Protokolle

  • SSH-Config (~/.ssh/config) für komfortable Verbindungsaliase