EMZETT.
Login

Secure Shell

Kurz: SSH — ein verschlüsseltes Protokoll, um sich sicher über ein Netzwerk auf der Kommandozeile eines entfernten Rechners anzumelden.

Genauer: Ersetzt ältere, unverschlüsselte Protokolle wie Telnet. Authentifizierung erfolgt per Passwort oder — üblicher und sicherer — per Schlüsselpaar (Public/Private Key). Neben der reinen Fernanmeldung wird SSH auch für Dateiübertragung (SCP, SFTP) und das Tunneln anderer Verbindungen genutzt.

Im Detail

ssh-keygen -t ed25519          # Schlüsselpaar erzeugen
ssh-copy-id nutzer@server       # öffentlichen Schlüssel auf den Server kopieren
ssh nutzer@server               # verbinden, ohne Passwort einzugeben

Der wesentliche Sicherheitsgewinn gegenüber älteren Protokollen wie Telnet ist, dass die gesamte Verbindung von Anfang an verschlüsselt ist — bei Telnet wurden Passwörter und der komplette Sitzungsverlauf im Klartext übertragen, mit einfachen Netzwerk-Sniffing-Tools mitlesbar. SSH baut zunächst über einen Schlüsselaustausch einen verschlüsselten Kanal auf, bevor überhaupt Anmeldedaten übertragen werden (siehe SSH-TRANS).

Die schlüsselbasierte Authentifizierung gilt als deutlich sicherer als Passwörter: der private Schlüssel verlässt niemals das eigene Gerät, der Server kennt nur den passenden öffentlichen Schlüssel und kann damit prüfen, ob der Client den zugehörigen privaten Schlüssel besitzt, ohne dass dieser je übertragen wird — resistenter gegen Brute-Force-Angriffe und Passwort-Leaks als klassische Passwort-Logins. In Server-Umgebungen wird Passwort-Login über SSH deshalb oft komplett deaktiviert, sodass nur noch Schlüssel-Authentifizierung möglich ist.

SSH-Agent und Schlüsselverwaltung

Wer mehrere SSH-Schlüssel für verschiedene Server oder Dienste (z. B. GitHub, private Server, Arbeitgeber-Infrastruktur) verwendet, nutzt üblicherweise einen SSH-Agent — ein Hintergrundprozess, der entschlüsselte private Schlüssel im Speicher hält, sodass man das Passwort/die Passphrase eines Schlüssels nur einmal pro Sitzung eingeben muss, statt bei jeder einzelnen SSH-Verbindung erneut. Der Agent reicht bei Bedarf automatisch den passenden Schlüssel an SSH weiter, ohne dass der private Schlüssel selbst je die sichere Umgebung des Agents verlässt.

Bekannte Host-Schlüssel und Man-in-the-Middle-Schutz

Beim allerersten Verbindungsaufbau zu einem neuen Server zeigt SSH einen “Fingerprint” des Server-Schlüssels und fragt, ob dieser vertrauenswürdig ist — dieser Fingerprint wird danach lokal in der known_hosts-Datei gespeichert. Bei jeder folgenden Verbindung vergleicht der Client den präsentierten Server-Schlüssel mit dem gespeicherten Fingerprint; weicht er ab, warnt SSH lautstark vor einem möglichen Man-in-the-Middle-Angriff (jemand könnte sich zwischen Client und echten Server geschaltet haben) und verweigert standardmäßig die Verbindung, bis der Nutzer den alten Eintrag explizit entfernt. Diese Warnung sollte nie einfach ignoriert werden, außer man weiß sicher, dass sich der Server-Schlüssel legitim geändert hat (z. B. nach einer Neuinstallation des Servers).

Port-Forwarding und Tunneling

Über den reinen Terminal-Zugriff hinaus erlaubt SSH auch, beliebige TCP-Verbindungen sicher durch den bestehenden verschlüsselten Kanal zu leiten (Port-Forwarding/Tunneling) — praktisch, um z. B. auf eine Datenbank zuzugreifen, die nur innerhalb eines privaten Netzwerks erreichbar ist, ohne diese Datenbank selbst direkt aus dem Internet erreichbar machen zu müssen. ssh -L 5432:localhost:5432 nutzer@server leitet dabei z. B. den lokalen Port 5432 durch die SSH-Verbindung zum entfernten Datenbank-Port um.

Siehe auch: Shell, SSH, Private Key