Zum Inhalt springen

„Secure Shell“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
bisschen umgeändert, reihenfolge der absätze geändert etc..
Linkvorschlag-Funktion: 1 Link hinzugefügt.
 
(529 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden)
Zeile 1: Zeile 1:
{| class="wikitable float-right"
{{Vorlage:IPStack}}
|+ style="background:#C0C0FF; font-size:larger;"| SSH
'''Secure shell''' oder '''SSH''' ist sowohl ein [[Computerprogramm|Programm]] als auch ein [[Netzwerkprotokoll]], mit dessen Hilfe man sich z.B. über das [[Internet]] auf einem entfernten Computer einloggen und dort Programme ausführen kann. Die [[IANA]] hat dem Protokoll den [[Transmission Control Protocol|TCP]]-[[Port (Protokoll)|Port]] 22 zugeordnet.
|-
| '''Familie:'''
| [[Internetprotokollfamilie]]
|-
| '''Einsatzgebiet:'''
| Datenübertragung auf Anwendungsschicht,<br />Fernsteuerung von Computern
|-
| '''Port:''' || 22/TCP
|-
|colspan="2" style="text-align:center"|
{{Netzwerk-TCP-IP-Anwendungsprotokoll|SSH}}
|}


'''Secure Shell''' oder '''SSH''' bezeichnet ein [[Kryptographie|kryptographisches]] [[Netzwerkprotokoll]] für den sicheren Betrieb von [[Netzwerkdienst]]en über ungesicherte Netzwerke.<ref name="rfc4251">{{RFC-Internet |RFC=4251 |Autor=T. Ylonen, C. Lonvick |Titel=The Secure Shell (SSH) Protocol Architecture |Datum=2006-01}}</ref> Häufig wird es verwendet, um lokal eine entfernte [[Kommandozeile]] verfügbar zu machen, d.&nbsp;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.&nbsp;B. zur [[Fernwartung]] eines in einem entfernten Rechenzentrum stehenden [[Server]]s. Die neuere Protokoll-Version&nbsp;SSH-2 bietet weitere Funktionen wie [[Datenübertragung]] per [[SSH File Transfer Protocol|SFTP]].
SSH wurde 1995 von [[Tatu Ylönen]] entwickelt. Es ermöglicht eine sichere [[Authentifizierung|authentifizierte]] und [[Kryptographie|verschlüsselte]] Verbindung zwischen zwei [[Computer|Rechnern]] über ein unsicheres Netzwerk. Deswegen sollten [[rlogin]], [[telnet]] und [[rsh]] nicht mehr verwendet, sondern stattdessen ssh eingesetzt werden. [[X11]]-Sitzungen und andere [[TCP/IP]]-Verbindungen können ebenfalls über diesen sicheren Kanal [[Port Forwarding | weitergeleitet]] werden.


Dabei dient SSH als Ersatz für andere, unsichere Methoden wie [[Telnet]]. Bei diesen werden alle Informationen, auch sensible wie etwa [[Passwort|Passwörter]], im [[Klartext (Kryptographie)|Klartext]] übertragen. Dies macht sie anfällig für [[Man-in-the-Middle-Angriff]]e sowie einen Vertraulichkeitsverlust durch [[Sniffer|Packet Analyzer]], die die [[Datenpaket]]e mitschneiden.<ref>{{cite web |title=SSH Hardens the Secure Shell |language=en |url=http://www.serverwatch.com/news/print.php/3551081 |archiveurl=https://web.archive.org/web/20180207232405/https://www.serverwatch.com/news/print.php/3551081 |archivedate=2018-02-07 |offline=yes |accessdate=2020-05-27 }}</ref> Die [[Verschlüsselung]]stechnik, 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.&nbsp;B. das [[Internet]]) gesendet werden, sicherzustellen.
Die von SSH1 verwendete Integritätsprüfung weist Schwachstellen auf, die es einem Angreifer ermöglichen, eine SSH1-Sitzung auszuspähen. Daher sollte nur noch die neue Protokollversion SSH2 verwendet werden. Diese zeichnet sich durch einen modularen Aufbau der Transport-, Autorisierungs- und Verbindungsschichten aus und ermöglicht im Gegensatz zu SSH1 die Verwendung von verschiedenen [[Kryptographie|Verschlüsselungsalgorithmen]]. Eine Arbeitsgruppe der [[Internet Engineering Task Force||IETF]] namens ''secsh'' arbeitet momentan an der [[Standard|Standardisierung]] des Protokolls.


SSH verwendet die [[Client-Server-Modell|Client–Server]]-Architektur. Eine SSH-Client-Anwendung verbindet sich also mit einem SSH-Server.<ref name="rfc4252">{{RFC-Internet |RFC=4252 |Autor=T. Ylonen, C. Lonvick |Titel=The Secure Shell (SSH) Authentication Protocol |Datum=2006-01}}</ref> Die Protokollspezifikation wird in zwei Versionen unterschieden, bezeichnet als&nbsp;SSH-1 und&nbsp;SSH-2. SSH war zuerst für [[Unixoides System|unixoide]] Betriebssysteme verfügbar, später auch für [[Microsoft Windows]].
Über das SSH-Protokoll können ebenfalls andere Informationen getunnelt werden. Beispielsweise steht mit [[Secure Copy]] (''SCP'') eine Möglichkeit zur Übertragung von Dateien über eine SSH-Verbindung zur Verfügung. Eine Erweiterung von SCP ist das [[SSH File Transfer Protocol]] (''SFTP''), welches gegenüber SCP zusätzliche Dateioperationen unterstützt. SFTP ist nicht zu verwechseln mit dem [[Secure FTP]], welches lediglich einen SSH-Tunnel des [[File Transfer Protocol|FTP]]-Steuerkanales und nicht der Daten erlaubt.


Die [[Internet Assigned Numbers Authority|IANA]] hat dem Protokoll den [[Transmission Control Protocol|TCP]]-[[Port (Netzwerkadresse)|Port]]&nbsp;22, [[User Datagram Protocol|UDP]]-Port&nbsp;22 und [[Stream Control Transmission Protocol|SCTP]]-Port&nbsp;22 zugeordnet.<ref>{{Internetquelle |url=https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml |titel=Service Name and Transport Protocol Port Number Registry |abruf=2020-05-27}}</ref>
SSH-Implementationen waren ursprünglich nur unter [[Unix]] verfügbar, mittlerweile wurden jedoch sowohl SSH-Server als auch Clients für andere [[Plattform (Computer)|Plattformen]] programmiert. Populär ist beispielsweise der SSH-Client [[PuTTY]] für [[Microsoft Windows]], welcher mittlerweile auch auf Unix portiert wurde, oder auch [[Tera Term]].


== Geschichte ==
Mit OpenSSH existiert auch eine [[Freie_Software|freie]] Implementierung von SSH.


== Weblinks ==
=== Version 1 ===
Die erste Version des Protokolls (jetzt SSH-1 genannt) wurde 1995 von [[Tatu Ylönen]] als Reaktion auf die Nachfrage nach [[drop-in replacement]]s für Berkeley Services unter [[Unix]] einschließlich der Befehle [[Remote Shell|rsh]] (remote [[Unix-Shell|shell]]), [[Cp (Unix)#rcp, ssh|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äre Software|proprietärer Software]].
* Implementationen:

** [http://www.ssh.com/ SSH.com]
=== Version 2 ===
** [http://www.openssh.com/ OpenSSH]
Nachdem einige Schwachstellen in der Integritätsprüfung von SSH-1 bekannt geworden waren, wurde von einer Arbeitsgruppe der [[Internet Engineering Task Force|IETF]]<ref>[https://datatracker.ietf.org/wg/secsh/documents/ secsh.] IETF (Internet Engineering Task Force).</ref> die überarbeitete Version SSH-2 entwickelt. Die technische Implementierung von SSH-2 ist inkompatibel zu SSH-1 und wurde 2006 in [[Secure Shell#Normen und Standards|einer Reihe]] von [[Request for Comments|RFC]]s als Standard veröffentlicht.<ref name="rfc4250">{{RFC-Internet |RFC=4250 |Titel=The Secure Shell (SSH) Protocol Assigned Numbers |Datum=}}</ref><ref name="rfc4251" />
** [http://www.lysator.liu.se/~nisse/lsh/ lsh]
Das Protokoll bekam eine mehrstufige Architektur, in der verschiedene Aufgabenbereiche in separate Ebenen aufgeteilt wurden, nämlich: Transport ([[Secure Shell#Sicherung der Transportschicht|SSH-TRANS]]), Authentifizierung ([[Secure Shell#Authentifizierung|SSH-AUTH]]) und Verbindungsaufbau (SSH-CONNECT).<ref>{{RFC-Internet |RFC=4251 |Autor=T. Ylonen, C. Lonvick |Titel=The Secure Shell (SSH) Protocol Architecture |Datum=2006-01 |Abschnitt=1 |Abschnittstitel=Introduction}}</ref>
** [http://www.freessh.org/ FreeSSH]
Gleichzeitig wurden (zur Zeit der Entwicklung) aktuelle und sicherere Kryptographieverfahren wie [[Diffie-Hellman-Schlüsselaustausch]], verbesserte Methoden zur [[Integrität (Informationssicherheit)|Integritätsprüfung]] wie [[Message-Digest Algorithm 5|MD5]] or [[SHA-1]] oder stärkere Verschlüsselungsmechanismen wie [[Advanced Encryption Standard|AES]] implementiert.<ref name="defguide">{{Internetquelle |autor=Daniel J. Barrett and Richard E. Silverman |url=https://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_05.htm |titel=SSH, The Secure Shell: The Definitive Guide |sprache=en-US |abruf=2025-03-17}}</ref>
** [http://sshwindows.sourceforge.net/ OpenSSH for Windows]

** [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY]
Jede der Architektur-Ebenen wurde zudem so strukturiert, dass alle konkret genutzten technischen Verfahren (z.&nbsp;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.<ref name="ssh-v1-v2-vergleich">[https://www.emtec.com/ssh/ssh-v2.de.html#vergleich-von-ssh-v2-vs-ssh-v1 Vergleich von SSH v2 vs SSH v1 (Algorithmus Namespace).] emtec.com</ref>
** [http://winscp.net/ WinSCP]

** [http://www.jcraft.com/jsch/ Jsch (Java SSH2 Client)]
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.&nbsp;B. 2009 mit RFC-5656<ref>{{RFC-Internet |RFC=5656 |Titel=Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer |Datum=2009-12}}</ref> vorgeschlagen, dass auch das Elliptic-Curve Verfahren [[Elliptic Curve DSA|ECDSA]] und Integritätsprüfung mittels [[SHA-2]] von Server und Client unterstützt werden.
** [http://www.ganymed.ethz.ch/ssh2/ Ganymed SSH2 (Java SSH2 client library)]

* [http://www.ietf.org/html.charters/secsh-charter.html IETF Arbeitsgruppe]
=== Vergleich von SSH-1 und SSH-2 ===
*[http://www.univie.ac.at/comment/00-3/003_23.html Funktionsweise von SSH]

Die folgende Tabelle zeigt eine Übersicht der Änderungen zwischen SSH-1 und SSH-2<ref name="defguide"></ref><ref name="ssh-v1-v2-vergleichtab">[https://www.emtec.com/ssh/ssh-v2.de.html#ssh2-vs-ssh1-funktionenvergleichstabelle Vergleichstabelle SSH v1 vs SSH v2.] emtec.com</ref><ref>[https://www.techtarget.com/searchsecurity/tip/An-introduction-to-SSH2 SSH2 vs. SSH1 and why SSH versions still matter.] techtarget.com (englisch).</ref>

{| class="wikitable"
|-
! 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-gcm, 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.
|-
|}

=== Freie und proprietäre Implementierungen ===
1998 wurde der SSH-Client [[PuTTY]] für [[Microsoft Windows]] unter einer [[Freie Lizenz|Freien Lizenz]] veröffentlicht.<ref>{{Internetquelle |url=https://www.chiark.greenend.org.uk/~sgtatham/putty/ |titel=PuTTY: a free SSH and Telnet client |abruf=2022-09-12}}</ref>

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&nbsp;3 (SSH&nbsp;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&nbsp;2) von der [[Internet Engineering Task Force|IETF]] als Internetstandard vorgeschlagen. Eine Zertifizierung nach [[Federal Information Processing Standard|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.<ref>{{Internetquelle |url=https://docs.microsoft.com/de-de/windows-server/administration/openssh/openssh_overview |titel=OpenSSH in Windows |werk=Microsoft Docs |datum=2021-08-13 |sprache=de-DE |abruf=2023-06-25}}</ref><ref>{{Internetquelle |url=https://twitter.com/nocentino/status/996843655112613888 |titel=OpenSSH for Windows |werk=twitter.com |sprache=en |abruf=2018-10-08}}</ref>

== Verwendung ==
[[Datei:X11 ssh tunnelling.png|mini|250px|Eine [[X11]]-Verbindung wird über SSH weitergeleitet]]

SSH ermöglicht eine sichere, [[Authentifizierung|authentifizierte]] und [[Kryptographie|verschlüsselte]] Verbindung zwischen zwei [[Computer|Rechnern]] über ein unsicheres Netzwerk. Dadurch dient es unter anderem als Ersatz für die Vorgänger [[Remote login|rlogin]], [[telnet]] und [[Remote Shell|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.

* [[SSH File Transfer Protocol|SFTP]] und [[Secure Copy|SCP]] bieten kryptographisch sicherere Alternativen zu [[File Transfer Protocol|FTP]] und [[Cp (Unix)#rcp, ssh|RCP]].
* [[X Window System|X11]] kann über SSH transportiert und somit gesichert werden.
* Über SSH können beliebige TCP/IP-Verbindungen getunnelt werden ([[Portweiterleitung]]); dabei wird jeweils ein einzelner Port von einem entfernten Server auf den Client weitergeleitet oder umgekehrt. So kann etwa eine ansonsten unverschlüsselte [[Virtual Network Computing|VNC]]-Verbindung abgesichert werden.
* Ein SSH-Client kann sich wie ein [[SOCKS]]-Server verhalten und ermöglicht somit einen automatisierten Zugriff auf entfernte Rechner durch den [[Tunnel (Rechnernetz)|SSH-Tunnel]], etwa zum Umgehen einer Firewall.
* Über [[SSHFS]] kann ein entferntes [[Dateisystem]] auf dem lokalen Rechner gemountet werden.
* Mit „ssh-keyscan“ kann der öffentliche Schlüssel eines entfernten Rechners ausgelesen werden. Damit kann man unter Zuhilfenahme des zugehörigen öffentlichen Schlüssels zum Beispiel feststellen, ob die [[IP-Adresse]] und/oder der DNS-Eintrag eines SSH-Servers manipuliert worden ist.

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:
; Secure System Administration (Sichere Systemverwaltung): zur Absicherung der Fernverwaltung von Servern. Ersetzt telnet, rlogin etc.
; Secure Application Tunneling (Sicheres Tunneln): zum transparenten Schutz TCP/IP-basierender Anwendungen als „[[Ende-zu-Ende-Verschlüsselung|End-to-End]]-Security“.
; Secure Remote Command Execution (Sichere Ausführung von Kommandos): zur Ausführung einzelner Kommandos auf einem anderen Rechner. Dabei werden <code>[[stdin]]</code>, <code>[[stdout]]</code> und <code>[[stderr]]</code> transparent weitergeleitet. Sonderfall davon:
:; Secure Subsystem Execution (Sichere Ausführung von Subsystemen): zur Ausführung von auf dem Server vordefinierter Kommandos, wobei <code>stderr</code> jedoch nicht weitergeleitet wird.<br />Beispiel: ''Secure File Transfer (Sicherer Dateitransfer)''<br />zur Herstellung sicherer, automatisierter und interaktiver Dateitransfers.
Anmerkung: SSH kann auch über mehrere Stationen laufen.

=== Subsysteme ===
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.<ref>{{Internetquelle |url=https://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml |titel=Secure Shell (SSH) Protocol Parameters |hrsg=IANA |abruf=2020-06-15}}</ref> Jeder Administrator kann darüber hinaus seine eigenen Subsysteme definieren; dabei sollte im Falle von nicht [[Internet Assigned Numbers Authority|IANA]]-registrierten Subsystemen die ''Conventions for Names''<ref>{{RFC-Internet |RFC=4250 |Titel=The Secure Shell (SSH) Protocol Assigned Numbers |Datum= |Abschnitt=4.6.1 |Abschnittstitel=Conventions for Names}}</ref> eingehalten werden (Stichwort @-Syntax).
{| class="wikitable"
|-
! Dienst !! SSH Connection Protocol Subsystem Name<ref>{{RFC-Internet |RFC=4250 |Titel=The Secure Shell (SSH) Protocol Assigned Numbers |Datum= |Abschnitt=4.9.5 |Abschnittstitel=}}</ref> !! Spezifikation
|-
| [[SSH File Transfer Protocol|SFTP]] || sftp || IETF-Draft<ref>[https://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer draft-ietf-secsh-filexfer]</ref>
|-
| SSH Public Key Subsystem || publickey || <nowiki>RFC&nbsp;4819</nowiki><ref>{{RFC-Internet |RFC=4819 |Titel=Secure Shell Public Key Subsystem |Datum=2007-03}}</ref>
|-
| [[Simple Network Management Protocol|SNMP]] || snmp || <nowiki>RFC&nbsp;5592</nowiki><ref>{{RFC-Internet |RFC=5592 |Titel=Secure Shell Transport Model for the Simple Network Management Protocol (SNMP) |Datum=2009-06}}</ref>
|-
| Netconf || netconf || <nowiki>RFC&nbsp;6242</nowiki><ref>{{RFC-Internet |RFC=6242 |Titel=Using the NETCONF Protocol over Secure Shell (SSH) |Datum=2011-06}}</ref>
|-
| SSH transport mapping for SYSLOG || syslog || IETF-Draft<ref>[https://tools.ietf.org/html/draft-gerhards-syslog-transport-ssh-00 draft-gerhards-syslog-transport-ssh-00]</ref>
|-
| Powershell || powershell || [https://docs.microsoft.com/de-de/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7 SSH Remoting in PowerShell]
|}

== Funktionsweise ==
=== Sicherung der Transportschicht ===
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-Kryptosystem|RSA]]-, [[Digital Signature Algorithm|DSA]]- oder [[Elliptic Curve DSA|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 [[Advanced Encryption Standard|AES]], [[3DES]], [[Blowfish]], [[Twofish]] und andere [[Symmetrisches Kryptosystem|symmetrische Verschlüsselungsverfahren]] verwendet. Sofern von beiden Seiten unterstützt, wird unter bestimmten Voraussetzungen (z.&nbsp;B. übertragene Datenmenge, verstrichene Zeit) wieder ein neuer Schlüssel ausgehandelt, um einen Angriff auf die Sicherung der Transportschicht zu erschweren.<ref>{{RFC-Internet |RFC=4253 |Autor=T. Ylonen, C. Lonvick |Titel=The Secure Shell (SSH) Transport Layer Protocol |Datum=2006-01}}</ref><ref name="rfc4252" /> 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.<ref>[https://schneier.com/crypto-gram-0207.html#3 Crypto-Gram.] schneier.com</ref>

=== Authentifizierung ===
Nach erfolgter Sicherung der Transportschicht kann sich der Client unter anderem per [[Public-Key-Authentifizierung]] mit einem [[Privater Schlüssel|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.<ref>[https://www.openssh.com/txt/release-6.2 Changelog OpenSSH 6.2.] openssh.com</ref><ref name="ocean1">{{Internetquelle |url=https://www.digitalocean.com/community/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-16-04 |titel=How To Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04 |werk=digitalocean.com |abruf=2018-03-09}}</ref>

== Sicherheit ==
Der Einsatz von SSH-1 wird nicht mehr empfohlen, da diese Protokollversion kryptographische Schwächen aufweist, daher sollte SSH-2 verwendet werden.<ref>[https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102-4.pdf Kryptographische Verfahren: Empfehlungen und Schlüssellängen.] (PDF) BSI, Technische Richtlinie TR-02102-4, Abschnitt 3.2, SSH-Versionen.</ref><ref>{{Internetquelle |url=https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102-4.pdf?__blob=publicationFile&v=8 |titel=Teil 4 – Verwendung von Secure Shell (SSH) |werk=Technische Richtlinie TR-02102-4 – Kryptographische Verfahren: Empfehlungen und Schlüssellängen |hrsg=[[Bundesamt für Sicherheit in der Informationstechnik]] |datum=2020-01 |format=PDF |abruf=2020-06-16}} {{" |Die Verwendung von SSH-2 wird empfohlen.}}</ref> 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 [[Kryptographie|Verschlüsselungsalgorithmen]].

Verbindet sich ein Client zum ersten Mal mit einem Server, wird ein sogenannter [[Fingerprint (Hashfunktion)|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.<ref>{{Internetquelle |url=https://github.com/ssh-mitm/ssh-mitm |titel=ssh-mitm/ssh-mitm |hrsg=ssh mitm server for security audits supporting public key authentication, session hijacking and file manipulation |datum=2021-01-17 |abruf=2021-01-18}}</ref>

== Implementierungen ==
SSH-Implementierungen waren ursprünglich nur unter [[Unix]] verfügbar. Mittlerweile wurden sowohl SSH-Server als auch Clients für andere [[Plattform (Computer)|Plattformen]] programmiert (siehe auch: [[#Geschichte|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 OS|Symbian]]) populär, sowie das Dateiübertragungsprogramm [[WinSCP]].

Serverseitig dominiert OpenSSH, das für nahezu alle Plattformen verfügbar ist<ref name="openssh-platforms">{{Internetquelle |url=https://www.openssh.com/portable.html |titel=OpenSSH: Portable Release |abruf=2025-03-17}}</ref>. Diese existiert auch unter [[Cygwin]]. Seit 2016 gibt es auch eine nativen Portierung für Windows.<ref name="Openss-Windows">[https://github.com/PowerShell/Win32-OpenSSH OpenSSH für Windows.] Github/PowerShell</ref>

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.<ref>{{Internetquelle |url=https://blogs.msdn.microsoft.com/powershell/2017/12/15/using-the-openssh-beta-in-windows-10-fall-creators-update-and-windows-server-1709/ |titel=Windows 10 OpenSSH als Feature-On-Demand |hrsg=Microsoft |abruf=2017-01-02}}</ref>

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 [[Smartcard]]s und USB-Tokens (PKCS#11) sowie [[X.509]]-v3-Zertifikaten ermöglicht. Auch OpenSSH kann Smartcards verwenden.

== Normen und Standards ==
SSH ist durch die nachfolgenden [[Request for Comments|RFCs]], welche durch die [[Internet Engineering Task Force|IETF]] “secsh” Arbeitsgruppe als [[Internetstandard|Internet-Standard]] vorgeschlagen wurden, standardisiert:
* {{RFC-Internet |RFC=4250 |Titel=The Secure Shell (SSH) Protocol Assigned Numbers |Datum=}}
* {{RFC-Internet |RFC=4251 |Titel=The Secure Shell (SSH) Protocol Architecture |Datum=}}
* {{RFC-Internet |RFC=4252 |Titel=The Secure Shell (SSH) Authentication Protocol |Datum=}}
* {{RFC-Internet |RFC=4253 |Titel=The Secure Shell (SSH) Transport Layer Protocol |Datum=}}
* {{RFC-Internet |RFC=4254 |Titel=The Secure Shell (SSH) Connection Protocol |Datum=}}
* {{RFC-Internet |RFC=4255 |Titel=Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints |Datum=}}
* {{RFC-Internet |RFC=4256 |Titel=Generic Message Exchange Authentication for the Secure Shell Protocol (SSH) |Datum=}}
* {{RFC-Internet |RFC=4335 |Titel=The Secure Shell (SSH) Session Channel Break Extension |Datum=}}
* {{RFC-Internet |RFC=4344 |Titel=The Secure Shell (SSH) Transport Layer Encryption Modes |Datum=}}
* {{RFC-Internet |RFC=4345 |Titel=Improved Arcfour Modes for the Secure Shell (SSH) Transport Layer Protocol |Datum=}}

Es wurde anschließend durch die folgenden [[Request for Comments|RFCs]] modifiziert und erweitert:
* {{RFC-Internet |RFC=4419 |Titel=Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol |Datum=2006-03}}
* {{RFC-Internet |RFC=4432 |Titel=RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol |Datum=2006-03}}
* {{RFC-Internet |RFC=4462 |Titel=Generic Security Service Application Program Interface (GSS-API) Authentication and Key Exchange for the Secure Shell (SSH) Protocol |Datum=2006-05}}
* {{RFC-Internet |RFC=4716 |Titel=The Secure Shell (SSH) Public Key File Format |Datum=2006-11}}
* {{RFC-Internet |RFC=4819 |Titel=Secure Shell Public Key Subsystem |Datum=2007-03}}
* {{RFC-Internet |RFC=5647 |Titel=AES Galois Counter Mode for the Secure Shell Transport Layer Protocol |Datum=2009-08}}
* {{RFC-Internet |RFC=5656 |Titel=Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer |Datum=2009-12}}
* {{RFC-Internet |RFC=6187 |Titel=X.509v3 Certificates for Secure Shell Authentication |Datum=2011-03}}
* {{RFC-Internet |RFC=6239 |Titel=Suite B Cryptographic Suites for Secure Shell (SSH) |Datum=2011-05}}
* {{RFC-Internet |RFC=6594 |Titel=Use of the SHA-256 Algorithm with RSA, Digital Signature Algorithm (DSA), and Elliptic Curve DSA (ECDSA) in SSHFP Resource Records |Datum=2012-04}}
* {{RFC-Internet |RFC=6668 |Titel=SHA-2 Data Integrity Verification for the Secure Shell (SSH) Transport Layer Protocol |Datum=2012-07}}
* {{RFC-Internet |RFC=7479 |Titel=[[Ed25519]] SSHFP Resource Records (März 2015) |Datum=}}
* {{RFC-Internet |RFC=5592 |Titel=Secure Shell Transport Model for the Simple Network Management Protocol (SNMP) |Datum=2009-06}}
* {{RFC-Internet |RFC=6242 |Titel=Using the NETCONF Protocol over Secure Shell (SSH) |Datum=2011-06}}
* draft-gerhards-syslog-transport-ssh-00 – SSH transport mapping for SYSLOG (Juli 2006)
* draft-ietf-secsh-filexfer-13 – SSH File Transfer Protocol (Juli 2006)

Zusätzlich enthält das [[OpenSSH]]-Projekt folgende herstellerspezifische Protokollspezifikationen und Erweiterungen:
* [http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/ssh/PROTOCOL?content-type=text/plain OpenSSH Protokoll Übersicht]
* [http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/ssh/PROTOCOL.certkeys?content-type=text/plain OpenSSH certificate/key Übersicht]

== Literatur ==
* Daniel J. Barrett, Richard E. Silverman, Robert G. Byrnes: ''SSH, the Secure Shell – The Definitive Guide''. 2. Ausgabe. O’Reilly, Sebastopol CA 2005, ISBN 0-596-00895-3.
* Michael W. Lucas: ''SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys''. CreateSpace, 2012, ISBN 978-1-4700-6971-1.

== Weblinks ==
{{Commonscat|SSH}}
* {{Man|1|ssh|gnu}}
* [https://datatracker.ietf.org/wg/secsh/documents/ Secure Shell (secsh)] – Seite der Arbeitsgruppe bei der ''[[Internet Engineering Task Force|IETF]]'' (englisch).
* [https://www.openssh.com/ OpenSSH] – offizielle Startseite
* [https://github.com/ssh-mitm/ssh-mitm SSH-MITM proxy server] ssh mitm server for security audits supporting public key authentication, session hijacking and file manipulation


== Einzelnachweise ==
{{WikiReader Internet}}
<references />


{{Normdaten|TYP=s|GND=4628726-7}}
[[Kategorie:Netzwerkprotokoll auf Anwendungsschicht]]


[[Kategorie:Internet-Anwendungsprotokoll]]
[[en:Secure shell]]
[[Kategorie:Verschlüsselungsprotokoll]]
[[es:SSH]]
[[Kategorie:Kryptologischer Standard]]
[[fi:SSH]]
[[Kategorie:Fernwartungssoftware]]
[[fr:Secure shell]]
[[Kategorie:Internetstandard]]
[[he:SSH]]
[[it:Secure shell]]
[[ja:Secure Shell]]
[[nb:SSH]]
[[nl:SSH]]
[[pl:SSH]]
[[pt:SSH]]
[[ru:SSH]]
[[sk:Secure shell]]
[[sl:Secure shell]]

Aktuelle Version vom 8. April 2025, 21:45 Uhr

SSH
Familie: Internetprotokollfamilie
Einsatzgebiet: Datenübertragung auf Anwendungsschicht,
Fernsteuerung von Computern
Port: 22/TCP
SSH im TCP/IP-Protokollstapel:
Anwendung SSH
Transport TCP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token
Bus
Token
Ring
FDDI

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.

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][1] 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).[7] 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.[8]

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.[9]

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[10] vorgeschlagen, dass auch das Elliptic-Curve Verfahren ECDSA und Integritätsprüfung mittels SHA-2 von Server und Client unterstützt werden.

Vergleich von SSH-1 und SSH-2

[Bearbeiten | Quelltext bearbeiten]

Die folgende Tabelle zeigt eine Übersicht der Änderungen zwischen SSH-1 und SSH-2[8][11][12]

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-gcm, 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.

Freie und proprietäre Implementierungen

[Bearbeiten | Quelltext bearbeiten]

1998 wurde der SSH-Client PuTTY für Microsoft Windows unter einer Freien Lizenz veröffentlicht.[13]

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.[14][15]

Eine X11-Verbindung wird über SSH weitergeleitet

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.

  • SFTP und SCP bieten kryptographisch sicherere Alternativen zu FTP und RCP.
  • X11 kann über SSH transportiert und somit gesichert werden.
  • Über SSH können beliebige TCP/IP-Verbindungen getunnelt werden (Portweiterleitung); dabei wird jeweils ein einzelner Port von einem entfernten Server auf den Client weitergeleitet oder umgekehrt. So kann etwa eine ansonsten unverschlüsselte VNC-Verbindung abgesichert werden.
  • Ein SSH-Client kann sich wie ein SOCKS-Server verhalten und ermöglicht somit einen automatisierten Zugriff auf entfernte Rechner durch den SSH-Tunnel, etwa zum Umgehen einer Firewall.
  • Über SSHFS kann ein entferntes Dateisystem auf dem lokalen Rechner gemountet werden.
  • Mit „ssh-keyscan“ kann der öffentliche Schlüssel eines entfernten Rechners ausgelesen werden. Damit kann man unter Zuhilfenahme des zugehörigen öffentlichen Schlüssels zum Beispiel feststellen, ob die IP-Adresse und/oder der DNS-Eintrag eines SSH-Servers manipuliert worden ist.

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:

Secure System Administration (Sichere Systemverwaltung)
zur Absicherung der Fernverwaltung von Servern. Ersetzt telnet, rlogin etc.
Secure Application Tunneling (Sicheres Tunneln)
zum transparenten Schutz TCP/IP-basierender Anwendungen als „End-to-End-Security“.
Secure Remote Command Execution (Sichere Ausführung von Kommandos)
zur Ausführung einzelner Kommandos auf einem anderen Rechner. Dabei werden stdin, stdout und stderr transparent weitergeleitet. Sonderfall davon:
Secure Subsystem Execution (Sichere Ausführung von Subsystemen)
zur Ausführung von auf dem Server vordefinierter Kommandos, wobei stderr jedoch nicht weitergeleitet wird.
Beispiel: Secure File Transfer (Sicherer Dateitransfer)
zur Herstellung sicherer, automatisierter und interaktiver Dateitransfers.

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.[16] Jeder Administrator kann darüber hinaus seine eigenen Subsysteme definieren; dabei sollte im Falle von nicht IANA-registrierten Subsystemen die Conventions for Names[17] eingehalten werden (Stichwort @-Syntax).

Dienst SSH Connection Protocol Subsystem Name[18] Spezifikation
SFTP sftp IETF-Draft[19]
SSH Public Key Subsystem publickey RFC 4819[20]
SNMP snmp RFC 5592[21]
Netconf netconf RFC 6242[22]
SSH transport mapping for SYSLOG syslog IETF-Draft[23]
Powershell powershell SSH Remoting in PowerShell

Sicherung der Transportschicht

[Bearbeiten | Quelltext bearbeiten]

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.[24][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.[25]

Authentifizierung

[Bearbeiten | Quelltext bearbeiten]

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.[26][27]

Der Einsatz von SSH-1 wird nicht mehr empfohlen, da diese Protokollversion kryptographische Schwächen aufweist, daher sollte SSH-2 verwendet werden.[28][29] 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.[30]

Implementierungen

[Bearbeiten | Quelltext bearbeiten]

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[31]. Diese existiert auch unter Cygwin. Seit 2016 gibt es auch eine nativen Portierung für Windows.[32]

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.[33]

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.

Normen und Standards

[Bearbeiten | Quelltext bearbeiten]

SSH ist durch die nachfolgenden RFCs, welche durch die IETF “secsh” Arbeitsgruppe als Internet-Standard vorgeschlagen wurden, standardisiert:

  • RFC: 4250 – The Secure Shell (SSH) Protocol Assigned Numbers. (englisch).
  • RFC: 4251 – The Secure Shell (SSH) Protocol Architecture. (englisch).
  • RFC: 4252 – The Secure Shell (SSH) Authentication Protocol. (englisch).
  • RFC: 4253 – The Secure Shell (SSH) Transport Layer Protocol. (englisch).
  • RFC: 4254 – The Secure Shell (SSH) Connection Protocol. (englisch).
  • RFC: 4255 – Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints. (englisch).
  • RFC: 4256 – Generic Message Exchange Authentication for the Secure Shell Protocol (SSH). (englisch).
  • RFC: 4335 – The Secure Shell (SSH) Session Channel Break Extension. (englisch).
  • RFC: 4344 – The Secure Shell (SSH) Transport Layer Encryption Modes. (englisch).
  • RFC: 4345 – Improved Arcfour Modes for the Secure Shell (SSH) Transport Layer Protocol. (englisch).

Es wurde anschließend durch die folgenden RFCs modifiziert und erweitert:

  • RFC: 4419 – Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer Protocol. März 2006 (englisch).
  • RFC: 4432 – RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol. März 2006 (englisch).
  • RFC: 4462 – Generic Security Service Application Program Interface (GSS-API) Authentication and Key Exchange for the Secure Shell (SSH) Protocol. Mai 2006 (englisch).
  • RFC: 4716 – The Secure Shell (SSH) Public Key File Format. November 2006 (englisch).
  • RFC: 4819 – Secure Shell Public Key Subsystem. März 2007 (englisch).
  • RFC: 5647 – AES Galois Counter Mode for the Secure Shell Transport Layer Protocol. August 2009 (englisch).
  • RFC: 5656 – Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer. Dezember 2009 (englisch).
  • RFC: 6187 – X.509v3 Certificates for Secure Shell Authentication. März 2011 (englisch).
  • RFC: 6239 – Suite B Cryptographic Suites for Secure Shell (SSH). Mai 2011 (englisch).
  • RFC: 6594 – Use of the SHA-256 Algorithm with RSA, Digital Signature Algorithm (DSA), and Elliptic Curve DSA (ECDSA) in SSHFP Resource Records. April 2012 (englisch).
  • RFC: 6668 – SHA-2 Data Integrity Verification for the Secure Shell (SSH) Transport Layer Protocol. Juli 2012 (englisch).
  • RFC: 7479 – Ed25519 SSHFP Resource Records (März 2015). (englisch).
  • RFC: 5592 – Secure Shell Transport Model for the Simple Network Management Protocol (SNMP). Juni 2009 (englisch).
  • RFC: 6242 – Using the NETCONF Protocol over Secure Shell (SSH). Juni 2011 (englisch).
  • draft-gerhards-syslog-transport-ssh-00 – SSH transport mapping for SYSLOG (Juli 2006)
  • draft-ietf-secsh-filexfer-13 – SSH File Transfer Protocol (Juli 2006)

Zusätzlich enthält das OpenSSH-Projekt folgende herstellerspezifische Protokollspezifikationen und Erweiterungen:

  • Daniel J. Barrett, Richard E. Silverman, Robert G. Byrnes: SSH, the Secure Shell – The Definitive Guide. 2. Ausgabe. O’Reilly, Sebastopol CA 2005, ISBN 0-596-00895-3.
  • Michael W. Lucas: SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys. CreateSpace, 2012, ISBN 978-1-4700-6971-1.
Commons: SSH – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. a b T. Ylonen, C. Lonvick: RFC: 4251 – The Secure Shell (SSH) Protocol Architecture. Januar 2006 (englisch).
  2. SSH Hardens the Secure Shell. Archiviert vom Original am 7. Februar 2018; abgerufen am 27. Mai 2020 (englisch).
  3. a b T. Ylonen, C. Lonvick: RFC: 4252 – The Secure Shell (SSH) Authentication Protocol. Januar 2006 (englisch).
  4. Service Name and Transport Protocol Port Number Registry. Abgerufen am 27. Mai 2020.
  5. secsh. IETF (Internet Engineering Task Force).
  6. RFC: 4250 – The Secure Shell (SSH) Protocol Assigned Numbers. (englisch).
  7. T. Ylonen, C. Lonvick: RFC: 4251 – The Secure Shell (SSH) Protocol Architecture. Januar 2006, Abschnitt 1: Introduction. (englisch).
  8. a b Daniel J. Barrett and Richard E. Silverman: SSH, The Secure Shell: The Definitive Guide. Abgerufen am 17. März 2025 (amerikanisches Englisch).
  9. Vergleich von SSH v2 vs SSH v1 (Algorithmus Namespace). emtec.com
  10. RFC: 5656 – Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer. Dezember 2009 (englisch).
  11. Vergleichstabelle SSH v1 vs SSH v2. emtec.com
  12. SSH2 vs. SSH1 and why SSH versions still matter. techtarget.com (englisch).
  13. PuTTY: a free SSH and Telnet client. Abgerufen am 12. September 2022.
  14. OpenSSH in Windows. In: Microsoft Docs. 13. August 2021, abgerufen am 25. Juni 2023 (deutsch).
  15. OpenSSH for Windows. In: twitter.com. Abgerufen am 8. Oktober 2018 (englisch).
  16. Secure Shell (SSH) Protocol Parameters. IANA, abgerufen am 15. Juni 2020.
  17. RFC: 4250 – The Secure Shell (SSH) Protocol Assigned Numbers. Abschnitt 4.6.1: Conventions for Names. (englisch).
  18. RFC: 4250 – The Secure Shell (SSH) Protocol Assigned Numbers. Abschnitt 4.9.5 (englisch).
  19. draft-ietf-secsh-filexfer
  20. RFC: 4819 – Secure Shell Public Key Subsystem. März 2007 (englisch).
  21. RFC: 5592 – Secure Shell Transport Model for the Simple Network Management Protocol (SNMP). Juni 2009 (englisch).
  22. RFC: 6242 – Using the NETCONF Protocol over Secure Shell (SSH). Juni 2011 (englisch).
  23. draft-gerhards-syslog-transport-ssh-00
  24. T. Ylonen, C. Lonvick: RFC: 4253 – The Secure Shell (SSH) Transport Layer Protocol. Januar 2006 (englisch).
  25. Crypto-Gram. schneier.com
  26. Changelog OpenSSH 6.2. openssh.com
  27. How To Set Up Multi-Factor Authentication for SSH on Ubuntu 16.04. In: digitalocean.com. Abgerufen am 9. März 2018.
  28. Kryptographische Verfahren: Empfehlungen und Schlüssellängen. (PDF) BSI, Technische Richtlinie TR-02102-4, Abschnitt 3.2, SSH-Versionen.
  29. Teil 4 – Verwendung von Secure Shell (SSH). (PDF) In: Technische Richtlinie TR-02102-4 – Kryptographische Verfahren: Empfehlungen und Schlüssellängen. Bundesamt für Sicherheit in der Informationstechnik, Januar 2020, abgerufen am 16. Juni 2020. „Die Verwendung von SSH-2 wird empfohlen.“
  30. ssh-mitm/ssh-mitm. ssh mitm server for security audits supporting public key authentication, session hijacking and file manipulation, 17. Januar 2021, abgerufen am 18. Januar 2021.
  31. OpenSSH: Portable Release. Abgerufen am 17. März 2025.
  32. OpenSSH für Windows. Github/PowerShell
  33. Windows 10 OpenSSH als Feature-On-Demand. Microsoft, abgerufen am 2. Januar 2017.