Was ist SSH und wie verbinden Sie sich mit einem Server?

Veröffentlicht:

15 Min. Lesezeit

Acar Diveroli
Autor: Acar Diveroli
Befehl ssh user@server.example, ein Tunnel mit TCP 22, KEX, HOST KEY und AUTH, die Host-Key-Abfrage und ein Schloss-Symbol

Sie mieten einen kleinen Cloud-Server, und die Willkommens-E-Mail enthält drei Angaben: eine IP-Adresse, einen Benutzernamen und die Zeile „SSH-Port: 22“. Oder das Handbuch eines Netzwerkspeichers in Ihrem Heimnetz verlangt, ein Terminal zu öffnen und ssh admin@192.168.1.50 einzugeben. Beide erwarten dasselbe: dass Sie sich per SSH auf diesem Gerät anmelden und auf seiner Kommandozeile arbeiten, als säßen Sie davor.

Dieser Beitrag erklärt, was SSH ist, was beim Verbinden passiert und wie Sie sich unter Windows, macOS und Linux verbinden. Danach geht es um die Host-Key-Abfrage, SSH-Schlüssel und Passwörter, Tunnel, den Unterschied zu TLS und einem VPN und um die Frage, wann SSH einen Proxy ersetzen kann.

Was ist SSH?

SSH, kurz für Secure Shell, ist ein Netzwerkprotokoll, das Ihnen über eine verschlüsselte Verbindung eine Kommandozeile auf einem entfernten Computer gibt. Eine Shell ist das Programm, das Ihre eingetippten Befehle liest und ausführt, etwa Bash unter Linux oder PowerShell unter Windows; SSH trägt dieses Gespräch über das Netz, sodass niemand dazwischen es lesen oder verändern kann.

Beteiligt sind zwei Programme. Der SSH-Client läuft auf Ihrem Computer und baut die Verbindung auf; der SSH-Server, ein Hintergrundprogramm, das meist sshd heißt, läuft auf dem entfernten Rechner und wartet standardmäßig auf TCP-Port 22. RFC 4251, das Architekturdokument der aktuellen Protokollversion, beschreibt SSH als Protokoll für die sichere Fernanmeldung und andere sichere Netzwerkdienste über ein unsicheres Netz.

Dieselbe verschlüsselte Verbindung kann auch Dateien kopieren, einen einzelnen Befehl ausführen oder andere Netzwerkverbindungen transportieren; genau das macht ein SSH-Tunnel. Ältere Werkzeuge wie Telnet schicken alles, auch Passwörter, als lesbaren Text; SSH erledigt dieselbe Aufgabe verschlüsselt.

Wie funktioniert eine SSH-Verbindung?

Eine SSH-Verbindung entsteht in fester Reihenfolge: Beide Seiten einigen sich auf die Verschlüsselung, der Server beweist, wer er ist, und erst dann melden Sie sich an. Nach ssh user@server.example passiert Folgendes:

  1. TCP-Verbindung. Ihr Client verbindet sich mit dem Server, auf Port 22, sofern Sie keinen anderen angeben.
  2. Versionsaustausch. Jede Seite schickt eine Zeile, die mit SSH-2.0- beginnt und ihre Software nennt.
  3. Schlüsselaustausch. Beide Seiten listen die Algorithmen auf, die sie unterstützen, wählen gemeinsame aus und berechnen dasselbe Geheimnis, ohne es je zu übertragen. Aus diesem Geheimnis entstehen die Sitzungsschlüssel, die ab hier alles verschlüsseln.
  4. Authentifizierung des Servers. Der Server signiert das Ergebnis mit seinem privaten Host-Key. Ihr Client prüft die Signatur und vergleicht den Schlüssel mit dem, den er früher gespeichert hat, oder fragt Sie, wenn der Server neu ist.
  5. Authentifizierung des Benutzers. Sie melden sich innerhalb der verschlüsselten Verbindung an, mit einem Passwort oder indem Sie beweisen, dass Sie einen SSH-Schlüssel besitzen.
  6. Kanäle. Ihre Shell, Dateiübertragungen und weitergeleitete Ports laufen als getrennte Kanäle in dieser einen Verbindung.

RFC 4253, die Spezifikation der Transportschicht, definiert die Schritte 1 bis 4 und nennt Port 22 als den Port, der SSH zugewiesen ist. Weil jede Verbindung frische Sitzungsschlüssel bekommt, kann jemand, der Ihren Datenverkehr heute aufzeichnet und den Host-Key des Servers später stiehlt, die Aufzeichnung trotzdem nicht entschlüsseln.

Wie verbinden Sie sich per SSH mit einem Server?

Sie geben ssh ein, dann den Benutzernamen auf dem Server, ein @ und die Adresse des Servers, und melden sich an, sobald Sie dazu aufgefordert werden:

bash
ssh user@server.example

user ist das Konto auf dem Server, nicht auf Ihrem Computer, und server.example steht für einen Hostnamen oder eine IP-Adresse wie 203.0.113.10. Für einen anderen Port als 22 ergänzen Sie -p: ssh -p 2222 user@server.example. Nach der unten beschriebenen Host-Key-Abfrage folgt das Passwort; während Sie es eintippen, erscheint nichts auf dem Bildschirm. Sobald der Prompt zu etwas wie user@server:~$ wechselt, laufen Ihre Befehle auf dem Server, und exit bringt Sie zurück.

Unter Windows

Windows 10 (ab Build 1809) und Windows 11 enthalten einen OpenSSH-Client, deshalb funktioniert ssh in PowerShell, in der Eingabeaufforderung und im Windows Terminal. Zur Kontrolle führen Sie ssh -V aus. Auf unserem Testrechner mit Windows 11 lautete die Ausgabe:

text
OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2

Wird ssh nicht erkannt, öffnen Sie Einstellungen > System > Optionale Features, wählen Features anzeigen, suchen nach OpenSSH-Client und fügen ihn hinzu; in manchen Versionen von Windows 11 liegt die Seite unter Einstellungen > Apps. Microsofts Anleitung zu OpenSSH für Windows zeigt diese Schritte und eine erste Verbindung.

Unter macOS und Linux

Beide bringen einen SSH-Client mit. Auf dem Mac öffnen Sie das Terminal über Spotlight oder im Ordner Programme > Dienstprogramme und geben denselben Befehl ein. Fehlt ssh auf einem Linux-System, installieren Sie dessen OpenSSH-Client-Paket, das meist openssh-client oder openssh heißt.

Warum fragt SSH bei der ersten Verbindung nach einer Bestätigung?

SSH fragt nach, weil es den Host-Key dieses Servers noch nie gesehen hat und selbst nicht erkennen kann, ob der Schlüssel zu dem Server gehört, den Sie erreichen wollten. Ein Host-Key (Hostschlüssel) ist ein Schlüsselpaar, das der Server erzeugt, wenn SSH auf ihm eingerichtet wird; seine öffentliche Hälfte weist den Server aus, ähnlich wie ein Zertifikat eine Website ausweist.

OpenSSH gibt The authenticity of host … can't be established aus (die Echtheit des Hosts lässt sich nicht feststellen) und zeigt Typ und Fingerabdruck (Fingerprint) des Schlüssels, eine kurze Prüfsumme wie SHA256: plus 43 Zeichen. Dann fragt es Are you sure you want to continue connecting (yes/no/[fingerprint])?, also ob Sie die Verbindung fortsetzen wollen. Antworten Sie yes, speichert der Client den Schlüssel in der Datei known_hosts im Ordner .ssh Ihres Benutzerprofils und prüft ihn bei jeder späteren Verbindung.

Bevor Sie antworten, vergleichen Sie den Fingerabdruck mit einem, den Sie auf anderem Weg erhalten haben: Manche Cloud-Anbieter zeigen ihn in der Konsolenausgabe des Servers, und ein Administrator kann ihn auf dem Server mit ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub anzeigen. Wer einen Schlüssel ungeprüft akzeptiert, ist offen für einen Man-in-the-Middle-Angriff: Jemand zwischen Ihnen und dem Server gibt sich als der Server aus und liest Ihr Passwort mit.

Meldet ein bekannter Server plötzlich WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! (die Identität des entfernten Hosts hat sich geändert), halten Sie an und fragen Sie den Betreiber, bevor Sie den alten Eintrag entfernen; ein neu installierter Server ist harmlos, ein untergeschobener nicht. Schalten Sie die Abfrage nie mit StrictHostKeyChecking no ab: Damit entfällt die einzige Prüfung, die Ihnen sagt, wer am anderen Ende sitzt.

Wie erstellen Sie einen SSH-Schlüssel?

Ein SSH-Schlüsselpaar erstellen Sie mit ssh-keygen, das zum SSH-Client gehört:

bash
ssh-keygen -t ed25519 -C "you@laptop"

-t ed25519 wählt den Typ Ed25519, in aktuellen OpenSSH-Versionen ohnehin der Standard, und -C fügt einen Kommentar hinzu, an dem Sie den Schlüssel wiedererkennen. Der Befehl fragt, wo der Schlüssel gespeichert werden soll (die Eingabetaste übernimmt den Ordner .ssh in Ihrem Benutzerprofil), und nach einer Passphrase, einem Passwort, das die Datei mit dem privaten Schlüssel verschlüsselt. Legen Sie eine fest: Ohne sie kann sich jeder, der die Datei kopiert, als Sie anmelden.

Auf unserem Testrechner mit Windows 11 haben wir mit -f demo_ed25519 einen Wegwerfschlüssel in einem Testordner gespeichert und danach gelöscht. Die Ausgabe, ohne den Ordnerpfad:

text
Generating public/private ed25519 key pair.
Your identification has been saved in demo_ed25519
Your public key has been saved in demo_ed25519.pub
The key fingerprint is:
SHA256:lkosA9+FmCGq1dOjgIoIqQKwHR/jAMjzf+GsngbbGCc you@laptop

Die Datei ohne Endung ist der private Schlüssel: Er verlässt Ihren Computer nie. Die Datei mit der Endung .pub ist der öffentliche Schlüssel, eine einzelne Zeile, die Sie frei weitergeben können. Das Handbuch zu ssh-keygen listet alle Optionen auf, auch wie Sie eine Passphrase ändern.

Für die Anmeldung per Schlüssel gehört die Zeile des öffentlichen Schlüssels in die Datei ~/.ssh/authorized_keys Ihres Kontos auf dem Server. Viele Cloud-Anbieter fragen beim Erstellen eines Servers danach und legen sie dort ab. Unter macOS und Linux kopiert ssh-copy-id user@server.example sie nach einer Anmeldung mit Passwort; unter Windows öffnen Sie die .pub-Datei im Editor, kopieren die Zeile, melden sich einmal mit Ihrem Passwort an und fügen sie in jene Datei ein.

Passwort oder SSH-Schlüssel: Welche Anmeldung sollten Sie nutzen?

Nutzen Sie einen SSH-Schlüssel, wo immer es geht: Für die erste Anmeldung reicht ein Passwort, aber ein eingerichteter Schlüssel ist sicherer und bequemer.

Anmeldung mit PasswortAnmeldung mit SSH-Schlüssel
Was Sie brauchenDas Passwort des KontosDie Datei mit dem privaten Schlüssel und ihre Passphrase
Was beim Server ankommtDas Passwort, innerhalb der VerschlüsselungNur eine Signatur; der Schlüssel bleibt bei Ihnen
RateangriffeBei schwachen Passwörtern möglichPraktisch aussichtslos
Passwort aus einem Datenleck, mehrfach verwendetÖffnet den ServerKeine Wirkung
Skripte und automatische BackupsUmständlich und riskantDafür gemacht
Bei VerlustEin Admin setzt es zurückNeuen öffentlichen Schlüssel über die Konsole hinzufügen

Der RFC, der die SSH-Anmeldung festlegt, macht die Anmeldung per Schlüssel zur einzigen Methode, die jeder Server unterstützen muss; Passwörter sind optional.

Was ist ein SSH-Tunnel?

Ein SSH-Tunnel transportiert eine weitere Netzwerkverbindung in Ihrer verschlüsselten SSH-Sitzung, sodass ein Programm auf Ihrem Computer einen Dienst auf dem Server oder in seiner Nähe erreicht, als liefe er lokal. Das nennt man Portweiterleitung (Port Forwarding), und ssh bietet drei Arten davon.

Lokale Weiterleitung (-L) ist die gebräuchlichste. Läuft auf Ihrem Server eine Datenbank, die nur auf dessen eigener Adresse 127.0.0.1 lauscht, verbindet sich nach ssh -L 5432:localhost:5432 user@server.example ein Datenbankprogramm auf Ihrem Laptop mit localhost:5432, und SSH stellt die Verbindung zur Datenbank auf dem Server zu. Entfernte Weiterleitung (-R) öffnet auf dem Server einen Port, der zu Ihrem Computer zurückführt. Dynamische Weiterleitung (-D) macht den Client zu einem kleinen SOCKS-Proxy; darum geht es im nächsten Abschnitt.

Das OpenSSH-Handbuch zu ssh beschreibt jede Option. Nutzen Sie Tunnel nur auf Servern, die Ihnen gehören oder die Sie verwalten, und in Netzen, in denen Sie das dürfen. Ein Tunnel verbirgt seinen Inhalt vor dem lokalen Netz, macht ihn aber nicht erlaubt: Sperrt eine Schule, ein Arbeitgeber oder eine Behörde einen Dienst, verstößt auch der Weg durch SSH gegen diese Regeln.

Kann SSH als SOCKS5-Proxy arbeiten?

Ja: ssh -D 1080 -N user@server.example startet auf Port 1080 Ihres eigenen Computers einen SOCKS5-Proxy und schickt alles, was hineingeht, über Ihren Server hinaus; -N öffnet keine Shell, nur den Tunnel. Ein SOCKS5-Proxy leitet die Verbindungen eines Programms zu beliebigen Adressen und Ports weiter, ohne sie zu lesen, wie der Beitrag Was ist ein SOCKS5-Proxy? erklärt.

Stellen Sie in einem Browser den SOCKS5-Proxy 127.0.0.1 mit Port 1080 ein, sehen Websites die IP Ihres Servers statt der Ihres Heimanschlusses. Kommandozeilenprogramme nehmen ihren Proxy meist aus Umgebungsvariablen, die so funktionieren, wie es unter Linux-Proxy-Einstellungen beschrieben ist.

Das hilft bei Ihrer eigenen Arbeit, etwa wenn Sie Ihre Website vom Standort des Servers aus prüfen. Die Grenzen gehören dazu: eine einzige Ausgangs-IP, eine Datacenter-Adresse in einer einzigen Stadt, ein Server, den Sie selbst pflegen, und nur TCP, während ein SOCKS5-Proxy auch UDP transportieren kann.

Braucht eine Aufgabe mehr als eine Adresse, arbeitet unser SOCKS5-Proxy mit denselben Einstellungen in denselben Programmen und bietet Residential- und Mobil-IPs in vielen Ländern, auswählbar nach Land und Stadt.

Für eine feste Adresse liefert der Datacenter-Proxy dedizierte IPv4-Adressen in mehr als 50 Ländern, ohne dass Sie einen Server betreiben.

SSH, SSL/TLS und VPN: Was ist der Unterschied?

Alle drei verschlüsseln Datenverkehr, schützen aber Verschiedenes: SSH eine Anmeldung und die Verbindungen, die darüber geöffnet werden, TLS eine einzelne Anwendungsverbindung wie eine Webseite und ein VPN alles, was ein Gerät sendet.

SSHSSL/TLSVPN
Was es schütztIhre Sitzung auf einem ServerEine Verbindung, etwa HTTPSDen gesamten Datenverkehr des Geräts
Wie der Server geprüft wirdHost-Key, bei der ersten Nutzung gespeichertZertifikat, von einer Zertifizierungsstelle signiertHängt vom VPN-Protokoll ab
Typischer EinsatzSerververwaltung, DateiübertragungWebsites, E-Mail, APIsFirmennetz, öffentliches WLAN
Standardport22443 für HTTPSHängt vom Protokoll ab

Der praktische Unterschied liegt darin, wie Vertrauen entsteht. Ein Browser vertraut einer Website, weil eine Zertifizierungsstelle für ihr SSL-Zertifikat bürgt, während SSH dem Schlüssel vertraut, den Sie bei der ersten Verbindung akzeptiert haben; deshalb zählt die Prüfung des Fingerabdrucks so viel.

Wie halten Sie den SSH-Zugang zu Ihrem Server sicher?

SSH ist sicher, wenn Sie Host-Keys prüfen, sich mit Schlüsseln anmelden und den Server aktuell halten; Einbrüche kommen von schwachen Passwörtern und gestohlenen Schlüsseln, nicht vom Protokoll. Gehen Sie davon aus, dass ständig jemand versucht, sich anzumelden:

  • Nutzen Sie Schlüssel mit Passphrase, einen Schlüssel pro Person, damit Sie einen entfernen können, ohne die anderen anzutasten.
  • Schalten Sie die Passwortanmeldung ab, sobald Ihr Schlüssel funktioniert: PasswordAuthentication no in /etc/ssh/sshd_config auf Ihrem eigenen Linux-Server. Lassen Sie beim Testen eine Sitzung offen, damit ein Fehler Sie nicht aussperrt.
  • Melden Sie sich nicht als root mit Passwort an. Die Standardeinstellung von OpenSSH erlaubt root ohnehin nur mit Schlüsseln; nutzen Sie ein normales Konto und sudo.
  • Installieren Sie Updates für das Betriebssystem und den SSH-Server.
  • Hüten Sie den privaten Schlüssel wie ein Passwort: Fügen Sie ihn nie in einen Chat, ein Ticket oder ein Repository ein.

SSH auf einen anderen Port zu verlegen, verringert nur das Rauschen in den Logs; der Schutz kommt von Schlüsseln und Updates.

Wo Ihnen SSH begegnet

  • Cloud-Server und VPS-Tarife, meist vom ersten Tag an per SSH verwaltet.
  • Shared Hosting, bei dem viele Tarife SSH neben dem Dateimanager anbieten.
  • Git, wo Adressen wie git@host:team/project.git Code mit Ihrem Schlüssel hoch- und herunterladen.
  • Dateiübertragung mit scp und sftp, die über SSH laufen und auch in Windows enthalten sind.
  • Geräte im Heimnetz wie Netzwerkspeicher und Router.
  • Ihr eigener Mac, den andere Computer per SSH erreichen können, sobald unter Systemeinstellungen > Allgemein > Teilen die Entfernte Anmeldung eingeschaltet ist; Apple weist darauf hin, dass der Mac dadurch weniger gut geschützt sein kann.

Häufige Fehler

  • Bei der Frage der ersten Verbindung yes eintippen, ohne den Fingerabdruck zu vergleichen.
  • Host-Key-Warnungen mit StrictHostKeyChecking no zum Schweigen bringen, statt herauszufinden, warum sich der Schlüssel geändert hat.
  • Den privaten Schlüssel schicken statt der .pub-Datei, wenn jemand nach „Ihrem SSH-Schlüssel“ fragt.
  • Die Passwortanmeldung abschalten, bevor die Anmeldung per Schlüssel funktioniert, und damit den Zugang zum Server verlieren.
  • Den falschen Benutzernamen verwenden. Viele Cloud-Images nutzen statt root ein Konto wie ubuntu oder admin, und ein falscher Name endet mit Permission denied.
  • Erwarten, dass Proxy-Umgebungsvariablen ssh beeinflussen. Das tun sie nicht; SSH hat eigene Einstellungen in ~/.ssh/config.

Entscheidungshilfe

Ihr BedarfWas Sie tun
Sich zum ersten Mal auf einem Server anmeldenssh user@server.example, Fingerabdruck vergleichen, dann yes
Der Server nutzt einen anderen Port-p und die Portnummer ergänzen
Keine Passwörter mehr eintippenSchlüssel mit ssh-keygen erstellen, die .pub-Zeile in authorized_keys eintragen
Eine Datenbank erreichen, die nur auf dem Server lauschtLokale Weiterleitung mit -L
Über die IP Ihres eigenen Servers surfenssh -D 1080 -N, dann SOCKS5 127.0.0.1:1080
Viele Standorte oder Residential-IPsEin Proxy-Dienst statt eines einzelnen Servers

Häufige Fragen

Ist SSH sicher?

Ja, wenn Sie den Host-Key bei der ersten Verbindung prüfen und Ihre Anmeldung schützen. Die Schwachstellen sind erratbare Passwörter, Schlüssel ohne Passphrase und ungeprüft akzeptierte Fingerabdrücke, nicht die Verschlüsselung.

Was ist Port 22?

Port 22 ist der TCP-Port, auf dem SSH-Server standardmäßig lauschen, und offiziell SSH zugewiesen. Ein Server kann einen anderen Port nutzen; dann verbinden Sie sich mit ssh -p 2222 user@server.example oder speichern den Port mit einer Port-Zeile in ~/.ssh/config.

Kann ich SSH auf dem Smartphone nutzen?

Ja. SSH-Client-Apps für Android und iPhone verbinden sich mit derselben Adresse, demselben Benutzernamen und demselben Port, und die meisten können auf dem Smartphone einen Schlüssel erzeugen, dessen öffentliche Hälfte Sie auf dem Server hinterlegen. Vergleichen Sie auch dort den Fingerabdruck des Host-Keys.

Was bedeutet Permission denied (publickey)?

Der Server akzeptiert nur Anmeldungen per Schlüssel, und keiner der Schlüssel, die Ihr Client angeboten hat, ist für diesen Benutzer hinterlegt. Prüfen Sie den Benutzernamen, ob der richtige Schlüssel verwendet wird (ssh -i wählt einen aus) und ob seine .pub-Zeile in ~/.ssh/authorized_keys dieses Kontos steht.

Was ist der Unterschied zwischen SSH, SFTP und SCP?

SSH ist das Protokoll und die Fernanmeldung; SFTP und SCP sind Werkzeuge zur Dateiübertragung, die innerhalb einer SSH-Verbindung laufen. sftp öffnet eine Sitzung, in der Sie durch Ordner navigieren, scp kopiert Dateien mit einem einzigen Befehl, und beide nutzen dieselbe Anmeldung und dieselben Schlüssel wie ssh.

Wie beende ich eine SSH-Sitzung?

Geben Sie exit ein oder drücken Sie Strg+D, wenn auf dem Server Linux oder macOS läuft. Hängt die Sitzung, drücken Sie die Eingabetaste und tippen dann ~. (Tilde und Punkt): Der Client erkennt darin eine Escape-Sequenz und schließt die Verbindung von Ihrer Seite aus.

Fazit

SSH gibt Ihnen eine verschlüsselte Kommandozeile auf einem entfernten Computer: Ihr Client verbindet sich auf Port 22, der Server weist sich mit einem Host-Key aus, und Sie melden sich mit einem Passwort oder, besser, mit einem Schlüssel aus ssh-keygen an. Prüfen Sie den Fingerabdruck einmal, schalten Sie die Host-Key-Prüfung nie ab und tunneln Sie nur dort, wo Sie es dürfen. Brauchen Sie mehr Ausgangsadressen, als ein einzelner Server liefern kann, vergleichen Sie unsere Proxy-Produkte.

ChatGPT fragenClaude fragen