Loading AI tools
Netzwerkprotokoll Aus Wikipedia, der freien Enzyklopädie
Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke.[1] Häufig wird es verwendet, um lokal eine entfernte Kommandozeile verfügbar zu machen, d. h., auf einer lokalen Konsole werden die Ausgaben der entfernten Konsole ausgegeben, und die lokalen Tastatureingaben werden an den entfernten Rechner gesendet. Genutzt werden kann dies z. B. zur Fernwartung eines in einem entfernten Rechenzentrum stehenden Servers. Die neuere Protokoll-Version SSH-2 bietet weitere Funktionen wie Datenübertragung per SFTP.
Familie: | Internetprotokollfamilie | ||||||||||||||||||||||||
Einsatzgebiet: | Datenübertragung auf Anwendungsschicht, Fernsteuerung von Computern | ||||||||||||||||||||||||
Port: | 22/TCP | ||||||||||||||||||||||||
|
Dabei dient SSH als Ersatz für andere, unsichere Methoden wie Telnet. Bei diesen werden alle Informationen, auch sensible wie etwa Passwörter, im Klartext übertragen. Dies macht sie anfällig für Man-in-the-Middle-Angriffe sowie einen Vertraulichkeitsverlust durch Packet Analyzer, die die Datenpakete mitschneiden.[2] Die Verschlüsselungstechnik, die durch SSH genutzt wird, hat deshalb den Zweck, die Vertraulichkeit, Integrität und Authentizität von Daten, die über ein unsicheres Netzwerk (wie z. B. das Internet) gesendet werden, sicherzustellen.
SSH verwendet die Client–Server-Architektur. Eine SSH-Client-Anwendung verbindet sich also mit einem SSH-Server.[3] Die Protokollspezifikation wird in zwei Versionen unterschieden, bezeichnet als SSH-1 und SSH-2. SSH war zuerst für unixoide Betriebssysteme verfügbar, später auch für Microsoft Windows.
Die IANA hat dem Protokoll den TCP-Port 22, UDP-Port 22 und SCTP-Port 22 zugeordnet.[4]
Die erste Version des Protokolls (jetzt SSH-1 genannt) wurde 1995 von Tatu Ylönen als Reaktion auf die Nachfrage nach drop-in replacements für Berkeley Services unter Unix einschließlich der Befehle rsh (remote shell), rcp (remote copy) und rlogin (remote login) entwickelt. Er veröffentlichte seine Implementierung 1995 als Freeware, die daraufhin schnell an Popularität gewann; Ende des Jahres 1995 zählte man bereits 20.000 Benutzer in fünfzig Ländern.
Im Dezember gründete Tatu Ylönen die Firma SSH Communications Security, um SSH zu vermarkten und weiterzuentwickeln. Die Originalsoftware enthielt ursprünglich Open-Source-Quellcode, entwickelte sich aber im Laufe der Zeit immer mehr zu proprietärer Software.
Nachdem einige Schwachstellen in der Integritätsprüfung von SSH-1 bekannt geworden waren, wurde von einer Arbeitsgruppe der IETF[5] die überarbeitete Version SSH-2 entwickelt. Die technische Implementierung von SSH-2 ist inkompatibel zu SSH-1 und wurde 2006 in einer Reihe von RFCs als Standard veröffentlicht.[6][7] Das Protokoll bekam eine mehrstufige Architektur, in der verschiedene Aufgabenbereiche in separate Ebenen aufgeteilt wurden, nämlich: Transport (SSH-TRANS), Authentifizierung (SSH-AUTH) und Verbindungsaufbau (SSH-CONNECT).[8] Gleichzeitig wurden (zur Zeit der Entwicklung) aktuelle und sicherere Kryptographieverfahren wie Diffie-Hellman-Schlüsselaustausch, verbesserte Methoden zur Integritätsprüfung wie MD5 or SHA-1 oder stärkere Verschlüsselungsmechanismen wie AES implementiert.[9]
Jede der Architektur-Ebenen wurde zudem so strukturiert, dass alle konkret genutzten technischen Verfahren (z. B. Verfahren für Integritätsprüfung oder Verschlüsselung) zwischen Server und Client ausgehandelt werden. Hierbei wurde ein Namenssystem verwendet, das anders als bei SSH-1 es auch erlaubt Verfahren zu verhandeln, die nicht durch die IANA standardisiert sind.[10]
Somit können in der Zukunft neu entwickelte Verfahren verwendet werden, ohne dass eine neue Version des SSH-Protokolls entwickelt werden muss. So wurde z. B. 2009 mit RFC-5656[11] vorgeschlagen, dass auch das Elliptic-Curve Verfahren ECDSA und Integritätsprüfung mittels SHA-2 von Server und Client unterstützt werden.
Die folgende Tabelle zeigt eine Übersicht der Änderungen zwischen SSH-1 und SSH-2[9][12][13]
Funktion | SSH-1 | SSH-2 |
---|---|---|
Architektur | Monolithisch. | 3 Ebenen: SSH-TRANS, SSH-AUTH, SSH-CONN |
Verwendete Verfahren | Teilweise statisch. | Verhandlungssache zwischen Client und Server. |
Integritätsprüfung/Hashing | Nur CRC32. | Ursprünglich MD5, SHA-1, später auch SHA-2. |
Authentifizierungsmethoden | Public-Key (DSA, RSA, OpenPGP), hostbasiert, Passwort. | Public-Key (nur RSA), RhostsRSA, Passwort, Rhosts, TIS, Kerberos. |
Namensraum | Nur IANA | IANA und frei definierbare Namen (mit @-Zeichen). |
Verschlüsselung | 3-DES, BlowFish, Arcfour, ... | aes-ctr, aes-cbc, aes-gc, chacha-poly, ... |
Übertragung von Dateien | SCP | SCP und SFTP. |
Zertifizierung von Schlüsseln | Keine | SSH-2 eigenes Zertifikatsformat (SSL-ähnlich). |
Periodische Neuverhandlung von Schlüsseln | Nicht verfügbar. | Verfügbar. |
1998 wurde der SSH-Client PuTTY für Microsoft Windows unter einer Freien Lizenz veröffentlicht.[14]
1999 wurde der Wunsch nach einer freien Implementierung von SSH laut, und aus der letzten freien Version der Originalimplementierung entwickelte sich das separate OpenSSH-Projekt. Spätestens seit dieser Zeit existiert das SSH-Protokoll in zwei Varianten: Als Open-Source-Software (OpenSSH) und als proprietäre Software (Produktname: SSH Tectia), entwickelt und vertrieben von der Firma SSH Communications Security, also den Original-Entwicklern rund um Ylönen.
2005, also zehn Jahre nach der Original-Entwicklung, ging die Firma SSH Communications Security mit der Generation 3 (SSH G3) an die Öffentlichkeit. Diese Protokollversion unterstützt die Verwendung des umstrittenen proprietären Algorithmus CryptiCore. Die anderen, etablierten Verschlüsselungsalgorithmen werden weiterhin unterstützt. 2006 wurde dieses Protokoll (Version 2) von der IETF als Internetstandard vorgeschlagen. Eine Zertifizierung nach FIPS-Standard 140-2 besteht bereits länger.
Microsoft Windows stellt als Teil des Betriebssystems seit Ende 2017 einen SSH-Client und Server bereit, der Client ist standardmäßig enthalten.[15][16]
SSH ermöglicht eine sichere, authentifizierte und verschlüsselte Verbindung zwischen zwei Rechnern über ein unsicheres Netzwerk. Dadurch dient es unter anderem als Ersatz für die Vorgänger rlogin, telnet und rsh; diese übertragen jeglichen Netzverkehr, darunter auch die Passwörter, unverschlüsselt.
Das ursprüngliche Anwendungsgebiet ist das Anmelden an entfernten Rechnern über ein Netzwerk (meistens das Internet), doch insbesondere SSH-2 ist nicht nur auf Terminalfunktionen beschränkt.
Wahlweise kann die Verbindung auch komprimiert werden, um die Datenübertragung zu beschleunigen und Bandbreite zu sparen.
Damit lassen sich nun grundsätzlich mehrere Anwendungsszenarien darstellen:
stdin
, stdout
und stderr
transparent weitergeleitet. Sonderfall davon:
stderr
jedoch nicht weitergeleitet wird.Anmerkung: SSH kann auch über mehrere Stationen laufen.
Im Fall von Secure Subsystem Execution können Subsysteme, die in einer SSH-Serverinstallation definiert wurden, aus der Ferne ausgeführt werden, ohne den genauen Pfad des auf dem Server auszuführenden Programms zu kennen. SFTP ist das gängigste Subsystem.
In den einschlägigen RFCs sind jedoch noch mehrere solcher Subsysteme definiert.[17] Jeder Administrator kann darüber hinaus seine eigenen Subsysteme definieren; dabei sollte im Falle von nicht IANA-registrierten Subsystemen die Conventions for Names[18] eingehalten werden (Stichwort @-Syntax).
Noch vor einer Authentifizierung des Clients wird für die Dauer der Sitzung ein geheimer Schlüssel zwischen Server und Client ausgehandelt, mit dem die gesamte nachfolgende Kommunikation verschlüsselt wird. Dabei identifiziert sich zunächst der Server dem Client gegenüber mit einem RSA-, DSA- oder ECDSA-Zertifikat, wodurch Manipulationen im Netzwerk erkannt werden können (kein anderer kann sich als ein bekannter Server ausgeben). Für die eigentliche Verschlüsselung der Verbindung werden bei SSH-2 AES, 3DES, Blowfish, Twofish und andere symmetrische Verschlüsselungsverfahren verwendet. Sofern von beiden Seiten unterstützt, wird unter bestimmten Voraussetzungen (z. B. übertragene Datenmenge, verstrichene Zeit) wieder ein neuer Schlüssel ausgehandelt, um einen Angriff auf die Sicherung der Transportschicht zu erschweren.[25][3] Die Version SSH G3 unterstützt auch den proprietären Algorithmus CryptiCore, der laut Hersteller einen Geschwindigkeitsgewinn bietet, dessen Sicherheit allerdings vom Kryptoexperten Bruce Schneier bezweifelt wird.[26]
Nach erfolgter Sicherung der Transportschicht kann sich der Client unter anderem per Public-Key-Authentifizierung mit einem privaten Schlüssel, dessen öffentlicher Schlüssel auf dem Server hinterlegt wurde, oder einem gewöhnlichen Kennwort authentisieren. Während Letzteres in der Regel eine Benutzerinteraktion erfordert, ermöglicht die Public-Key-Authentifizierung, dass sich Client-Computer auch ohne Benutzerinteraktion auf SSH-Servern einloggen können, ohne dass dabei ein Passwort auf dem Client im Klartext gespeichert werden muss. Zur weiteren Absicherung können die privaten SSH-Schlüssel mit einem Passwort geschützt werden. Neuere Versionen des OpenSSH-Servers unterstützen mit verschiedenen Konfigurationsmöglichkeiten die Zwei-Faktor-Authentisierung oder auch eine Multi-Faktor-Authentisierung, bei der eine Kombination unterstützter Authentisierungsverfahren wie beispielsweise eine Kennwortangabe in Kombination mit dem Verfahren Time-based one-time password (TOTP) erfolgreich zur Anmeldung durchlaufen werden muss.[27][28]
Der Einsatz von SSH-1 wird nicht mehr empfohlen, da diese Protokollversion kryptographische Schwächen aufweist, daher sollte SSH-2 verwendet werden.[29][30] SSH-2 zeichnet sich durch modularen Aufbau der Transport-, Autorisierungs- und Verbindungsschichten aus und ermöglicht im Gegensatz zu SSH-1 die Verwendung von verschiedenen Verschlüsselungsalgorithmen.
Verbindet sich ein Client zum ersten Mal mit einem Server, wird ein sogenannter Fingerprint des öffentlichen Schlüssels angezeigt. Wird dieser Fingerprint akzeptiert, gilt er als vertrauenswürdig und in Zukunft wird bei einem abweichenden Fingerprint darauf hingewiesen, dass die Verbindung nicht vertrauenswürdig ist. Dieses Prinzip nennt man auch „Trust on first use“. Genau hier ist es jedoch möglich mit einem Man in the Middle Angriff anzusetzen, weil der Fingerprint noch nicht bekannt ist. Sowohl für SSH-1 als auch für SSH-2 existieren Tools, mit denen ein MitM Angriff durchgeführt werden kann.[31]
SSH-Implementierungen waren ursprünglich nur unter Unix verfügbar. Mittlerweile wurden sowohl SSH-Server als auch Clients für andere Plattformen programmiert (siehe auch: Geschichte). Als Clients sind beispielsweise OpenSSH (für Microsoft Windows, Linux und andere Plattformen), der SSH-Client PuTTY (für Windows und Linux sowie Symbian) populär, sowie das Dateiübertragungsprogramm WinSCP.
Serverseitig dominiert OpenSSH, das für nahezu alle Plattformen verfügbar ist[32]. Diese existiert auch unter Cygwin. Seit 2016 gibt es auch eine nativen Portierung für Windows[33].
Mit dem Windows 10 Fall Creators Update steht (zunächst in der Beta-Version) ein OpenSSH Server und Client als Feature-on-Demand direkt in Windows 10 zur Verfügung.[34]
Diese erlauben es (in Kombination mit einem SSH Client), sich per SSH auf einem Windows-Rechner einzuloggen und eine Shell zu bedienen. Für skriptgesteuerte Aufgaben, zum Beispiel Datensicherung, ist dies ein mächtiges Werkzeug.
Die SSH Communications Security bietet mit dem SSH Tectia Client/Server eine kommerzielle SSH-Implementierung an, die eine Authentisierung mittels Smartcards und USB-Tokens (PKCS#11) sowie X.509-v3-Zertifikaten ermöglicht. Auch OpenSSH kann Smartcards verwenden.
SSH ist durch die nachfolgenden RFCs, welche durch die IETF “secsh” Arbeitsgruppe als Internet-Standard vorgeschlagen wurden, standardisiert:
Es wurde anschließend durch die folgenden RFCs modifiziert und erweitert:
Zusätzlich enthält das OpenSSH-Projekt folgende herstellerspezifische Protokollspezifikationen und Erweiterungen:
ssh(1)
– Debian GNU/Linux Ausführbare Programme oder Shell-Befehle HandbuchseiteSeamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.