Der Befehl ssh (Secure Shell) stellt eine verschlüsselte Verbindung zu einem entfernten Server her. Über diese Verbindung kannst du Befehle ausführen, Dateien übertragen und Netzwerkdienste tunneln.
Syntax des ssh-Befehls
ssh [OPTIONEN] [BENUTZER@]HOST [BEFEHL]
OPTIONEN- Flags, die das Verbindungsverhalten steuern.BENUTZER- Der Benutzername auf dem entfernten Server. Ohne Angabe wird dein lokaler Benutzername verwendet.HOST- Die IP-Adresse oder der Hostname des Zielservers.BEFEHL- Optional: Ein Befehl, der auf dem Server ausgeführt wird.
Voraussetzungen für eine SSH-Verbindung
Bevor du dich mit einem Server verbinden kannst, müssen diese Bedingungen erfüllt sein:
- Auf dem Zielserver läuft ein SSH-Server (meist OpenSSH).
- Der SSH-Port (standardmäßig 22) ist in der Firewall geöffnet.
- Du kennst den Benutzernamen und das Passwort oder hast einen SSH-Schlüssel eingerichtet.
Mit einem Server verbinden
Die einfachste Form der Verbindung verwendet nur den Hostnamen:
ssh server.example.com
Bei der ersten Verbindung zu einem neuen Server erscheint eine Sicherheitsabfrage:
The authenticity of host 'server.example.com (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:xR4jK9mN2pL5vQ8wE3tY6uI1oA7sD0fG2hJ4kL6zX8c.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Gib yes ein, um den Server-Fingerabdruck zu speichern. Dieser wird in ~/.ssh/known_hosts abgelegt und bei zukünftigen Verbindungen automatisch überprüft.
Als bestimmter Benutzer anmelden
Wenn dein lokaler Benutzername nicht mit dem auf dem Server übereinstimmt, gib den Benutzernamen mit an:
ssh admin@server.example.com
Alternativ funktioniert auch die Option -l:
ssh -l admin server.example.com
Einen anderen Port verwenden
Manche Server verwenden einen anderen Port als den Standard-Port 22. Mit der Option -p gibst du den Port an:
ssh -p 2222 admin@server.example.com
Einen Befehl direkt ausführen
Du kannst einen Befehl auf dem Server ausführen, ohne eine interaktive Shell zu starten. Nach der Ausführung wird die Verbindung automatisch beendet:
ssh admin@server.example.com "df -h"
Das ist praktisch für automatisierte Skripte oder schnelle Statusabfragen.
Die wichtigsten Optionen
| Option | Beschreibung |
|---|---|
-p PORT | Verbindet zu einem anderen Port als 22 |
-l BENUTZER | Legt den Benutzernamen fest |
-i DATEI | Verwendet eine bestimmte Schlüsseldatei |
-v | Zeigt Debug-Ausgaben (für Fehlersuche) |
-N | Öffnet keine Shell (für Portweiterleitung) |
-f | Wechselt nach der Authentifizierung in den Hintergrund |
-L | Richtet lokale Portweiterleitung ein |
-R | Richtet entfernte Portweiterleitung ein |
-D | Erstellt einen SOCKS-Proxy |
Authentifizierung mit SSH-Schlüsseln
Statt bei jeder Verbindung ein Passwort einzugeben, kannst du ein Schlüsselpaar verwenden. Das ist sicherer und bequemer.
Schlüsselpaar erzeugen
ssh-keygen -t ed25519 -C "dein@email.com"
Der Befehl erstellt zwei Dateien:
~/.ssh/id_ed25519- Der private Schlüssel (bleibt auf deinem Rechner)~/.ssh/id_ed25519.pub- Der öffentliche Schlüssel (wird auf Server kopiert)
Öffentlichen Schlüssel auf Server kopieren
ssh-copy-id admin@server.example.com
Nach der Eingabe deines Passworts wird der öffentliche Schlüssel in ~/.ssh/authorized_keys auf dem Server gespeichert. Ab sofort kannst du dich ohne Passwort anmelden.
Bestimmten Schlüssel verwenden
Wenn du mehrere Schlüssel hast, wähle mit -i den passenden aus:
ssh -i ~/.ssh/projekt_key admin@server.example.com
Die SSH-Konfigurationsdatei
Bei häufigen Verbindungen zu verschiedenen Servern spart eine Konfigurationsdatei Zeit. Erstelle oder bearbeite ~/.ssh/config:
Host webserver
HostName server.example.com
User admin
Port 2222
IdentityFile ~/.ssh/projekt_key
Host dbserver
HostName 192.168.1.50
User root
Jetzt reicht ein kurzer Befehl:
ssh webserver
Das entspricht dem ausführlichen Befehl ssh -p 2222 -i ~/.ssh/projekt_key admin@server.example.com.
Lokale Portweiterleitung
Mit lokaler Portweiterleitung leitest du einen Port auf deinem Rechner durch den SSH-Tunnel zu einem Ziel weiter. Das ist nützlich, um auf Dienste zuzugreifen, die nur intern erreichbar sind.
ssh -L 8080:localhost:80 admin@server.example.com
Dieser Befehl leitet deinen lokalen Port 8080 an Port 80 auf dem Server weiter. Öffne im Browser http://localhost:8080, um die Webseite des Servers zu sehen.
Du kannst auch auf andere Rechner im Netzwerk des Servers zugreifen:
ssh -L 3306:datenbank.intern:3306 admin@server.example.com
Entfernte Portweiterleitung
Entfernte Portweiterleitung funktioniert umgekehrt: Ein Port auf dem Server wird zu deinem lokalen Rechner weitergeleitet.
ssh -R 8080:localhost:3000 admin@server.example.com
Besucher von server.example.com:8080 erreichen damit den Dienst auf deinem lokalen Port 3000.
SOCKS-Proxy einrichten
Mit der Option -D erstellst du einen SOCKS-Proxy, über den du deinen gesamten Netzwerkverkehr tunneln kannst:
ssh -D 1080 -N admin@server.example.com
Konfiguriere deinen Browser oder andere Anwendungen so, dass sie localhost:1080 als SOCKS5-Proxy verwenden.
Verbindungsprobleme beheben
Bei Verbindungsproblemen hilft die Option -v für ausführliche Debug-Ausgaben:
ssh -v admin@server.example.com
Für noch mehr Details verwende -vv oder -vvv.
Häufige Probleme und Lösungen:
- Connection refused: Der SSH-Server läuft nicht oder der Port ist blockiert.
- Permission denied: Falsches Passwort oder fehlende Schlüsselberechtigung.
- Host key verification failed: Der Server-Fingerabdruck hat sich geändert. Prüfe, ob das legitim ist, bevor du den alten Eintrag aus
~/.ssh/known_hostsentfernst.
Installation
Auf den meisten Distributionen ist der SSH-Client vorinstalliert. Falls nicht:
Debian/Ubuntu:
sudo apt install openssh-client
Fedora/RHEL:
sudo dnf install openssh-clients
macOS: Der SSH-Client ist standardmäßig installiert.
Zusammenfassung
Der ssh-Befehl ist das Standardwerkzeug für sichere Verbindungen zu entfernten Servern. Mit SSH-Schlüsseln wird die Authentifizierung sicherer und komfortabler. Die Konfigurationsdatei ~/.ssh/config vereinfacht die Verwaltung mehrerer Server. Portweiterleitung ermöglicht den Zugriff auf Dienste hinter Firewalls.