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
# 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@serverDie Authentifizierung per Public/Private Key ist sicherer als Passwörter und ermöglicht passwortlosen Login – wichtig für Automatisierung und Scripts.
Funktionsprinzip:
Client generiert ein Schlüsselpaar: Private Key (geheim, bleibt beim Client) und Public Key (öffentlich, wird auf dem Server hinterlegt)
Server verschlüsselt eine Herausforderung mit dem Public Key
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
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 -tRoot-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
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
exitrsync 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 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@serverMit ~/.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.100SSH: 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