SSH: Secure Shell

Konsolen-Server und Client

SSH (Secure Shell) ist ein Protokoll zur sicheren Kommunikation zwischen 2 Partnern (Server, Client) Über SSH wird hauptsächlich Text übertragen, durch Verschlüsselung allerdings weitgehend sicher gegen Abhören.
Server Dienste im Hintergrund
Konsole Kurze Vorstellung der mit SSH zu steuernden Konsolen
Server-Client Auftragnehmer und Auftraggeber
SSH-Grundlage Auf SSH aufsetzende Dienste: SFTP, SCP, Tunnel, ...
Voraussetzungen Server, Client, Netzwerk, Zugangsrechte, ...
OpenSSH Der meist-verwendete SSH-Server auf Linux
WinSSHD Ein SSH-Server für Windows
ssh Standard Linux Konsolen-Programm ssh als SSH-Client
PuTTY Standard Windows SSH-Client-Programm
X11 Grafische Fensteuerung von Linux Programmen oder Desktop
Links Ausgewählte Links zum Thema 'SSH'

Konsolen-Programme

SSH dient in erster Linie zur Fern-Steuerung von Konsolen.
Man kann diesen Dienst nur dann sinnvoll verwnden, wenn man mindestens über Grundkenntnisse der jeweiligen Konsolen-Programme verfügt.
Eine Konsole bietet die Möglichkeit, Anweisungen in Klartext einzugeben. Die damit gestarteten Programme verwenden die Konsole meist auch zur Ausgabe der Ergebnisse, natürlich ebenfalls als Text.

Linux-Shell

Linux bietet - wie auf diesem System üblich - gleich mehrere Shell-Konsolen-Programme, die man sogar miteinander kombinieren kann. Die meist-verwendete Shell-Konsole ist die Bash.

Konsolen-Programme werden vorwiegend zur Verwaltung eingesetzt. Die technischen Möglichkeiten der Linux Konsolen-Programme gehen weit über jene der Windows-Konsole hinaus.

Script-Programme in der Programmiersprache → Perl werden häufig zur Ergänzung der Linux Konsolen-Programme eingesetzt.

Die Fern-Steuerung von Linux-PC, insbesondere von Linux-Server-PC mit SSH ist üblich und häufig. Man kann über eine SSH-Konsole alle Linux-Shell Befehle erteilen, alle Perl CLI-Programme verwenden und sogar Fenster-Programme oder einen kompletten Linux-Desktop mit SSH steuern.

Windows-CMD-Konsole

Das Programm cmd.exe ist (fast) das einzige Windows Konsolen-Programm. Es stammt noch aus der IT-Urzeit ('MS-DOS'), wurde seither kaum verbessert und eher notdürftig mit 'Eingabeaufforderung' übersetzt.

Das Programm-Paket → Cygwin portiert zahlreiche Linux-Shell-Programme auf Windows-Systeme.
Die Programmiersprache → Perl kann die veraltete Windows-Konsole mit den Möglichkeiten einer modernen Programmiersprache ergänzen.

Mit SSH kann man jeden Windows-PC, insbesondere aber jeden Windows-Server-PC über seine Konsole fern-steuern. Diese Möglichkeit ist praktisch, wird jedoch nur selten eingesetzt.

Binäre Programme

Die wichtigsten Konsolen-Programme (Core) jedes Betriebssystems sind meist in der Programmiersprache C++ hergestellt. Sie sind in Maschinensprache übersetzt und arbeiten daher besonders schnell. Allerdings sind diese Binär-Dateien (z.B. *.exe ) für Menschen nicht lesbar.

Diese → Core-Programme bilden die 'Grundausrüstung' jedes Betriebssystems. Sie werden nur selten verändert und überdauern meist viele Versionen der jeweiligen Betriebssysteme.

Microsoft bevorzugt binäre Programme, u.a. weil sie von nicht autorisierten Personen nur mit sehr hohem Aufwand geändert werden können.

Script-Programme

sind Text-Dateien, in denen Anweisungen der jeweiligen Programmiersprache enthalten sind. Die Dateien (z.B. *.cmd ) sind für Menschen lesbar und werden bei jeder einzelnen Ausführung in Maschinensprache überstzt.

Das ist zwar langsamer, die Texte lassen sich jedoch mit wenig Aufwand ändern. Mit den flexiblen Script-Programmen werden viele Aufgaben an die jeweiligen Verhältnisse (z.B. Betriebssystem-Versionen) angepasst. Die Texte von Script-Programmen lassen sich insbesondere auch von anderen Programmen herstellen oder verändern.

Auf Linux werden besonders viele Script-Programme eingesetzt. Das erleichtert die Zusammenarbeit der EntwicklerInnen und bewährt sich insbesondere für OpenSource Produkte.

Wenig Komfort

Konsolen-Programme bieten sehr wenig Komfort und erfordern weit mehr Fachkenntnisse als übliche AnwenderInnen-Programme, die in grafischen Fenstern mit der Maus bedient werden. Deshalb ist die Anwendung meist auf IT-Gurus (AdministratorInnen) beschränkt.

Wenige Daten

Konsolen-Programme benötigen wesentlich weniger Daten zur Ausführung. Sie werden schon mit wenigen Buchstaben (=Bytes) gestartet und liefern meist nur wenig Text als Ergebnis. Daher sind zur Fern-Bedienung einer Konsole nur sehr wenige Daten zu transportieren.
SSH ist daher um Größenordnungen schneller und effizienter als alternative Varianten mit Fenster und Maus-Bedienung.

Server - Client

SSH-Server

Ein Server bietet Dienstleistungen an. Das Angebot richtet sich an alle über das Netzwerk erreichbaren Clients: Das sind normalerweise alle anderen PC (oder andere Geräte) im lokalen Netzwerk (LAN), je nach Konfiguration auch alle an das Internet angeschlossnen Computer.

Ein SSH-Server erlaubt die Fernsteuerung jenes Server-PC, auf welchem das Server-Programm läuft.

Alle gängigen Linux-Betriebssysteme bieten einen SSH-Server. Dieser ist in Server-Versionen schon betriebsfertig installiert, und lässt sich in Desktop-Versionen (Arbeits-PC) mit Mausklick installieren.
Auf Linux wird fast nur der bewährte OpenSSH Server verwendet.

Windows-Systeme werden nur selten mit einem SSH-Server ausgerüstet. Immerhin gibt es auch für diese Systeme einige freie SSH-Server-Programme, z.B. WinSSHD

Auf Windows sind die Konsolen-Programme meist für alle User zugänglich.
Auf Linux ist eine strenge Trennung üblich: Harmlose Programme zur Verwaltung des eigenen User-Bereichs sind allgemein verwendbar, heikle Programme sind dem Linux-Administrator root vorbehalten.

SSH-Client

Ein Client handelt als Auftrag-Geber. Die Aufträge können an alle passenden Server gerichtet werden, welche den gleichen → Port (22) zur Kommunikation verwenden und das gleiche Protokoll verstehen.

Ein SSH-Client kann jeden erreichbaren SSH-Server steuern. Die Verbindung kann über das lokale Netzwerk oder über das Internet erfolgen.

Zu Beginn muss sich ein/e SSH-AnwenderIn autorisieren (Name, Passwort). Alle Daten der SSH-Verbindung werden verschlüsselt übertragen. Man kann sie zwar abhören, die Decodierunmg ist jedoch mit 'normalen' Methoden nicht möglich. Mit großem Aufwand (Geheimdienste) ist die Decodierung allerdings kein Problem.

Auf Linux kann man die immer verfügbare Shell-Konsole als SSH-Client verwenden. Das ist so einfach und effizient, dass kaum andere SSH-Client-Programme eingesetzt werden.

Auf Windows muss man zur Fernsteuerung ein SSH Client Programm installieren. Meist-verwendet ist das bewährte Programm PuTTY, zu dem es mittlerweile auch einige Zusatz-Produkte gibt. PuTTY muss man nicht installieren, das Programm lässt sich auch portabel auf USB-Stick verwenden.

Auf SSH aufgesetzte Dienste

SSH hat sich zum sicheren Transport von Daten so gut bewährt, dass sich einige andere Dienste zu diesem Zweck auf SSH stützen.
In diesem Fall wird eine SSH-Verbindung eingerichtet, jedoch nicht vom menschlichen User als Konsole verwendet, sondern von einem Programm zum Transport von Daten.
Wenn ein Dienst das SSH-Protokoll verwendet, dann muss dafür kein eigener → Port am Firewall geöffnet werden: Es genügt die meist eingerichtete Freigabe des Standard SSH-Ports 22.

SFTP (Secure File Transport Protocol)

bietet die Möglichkeit, beliebige Dateien verschlüsselt mit SSH zu übertragen.
Beispiel:   Das Programm FileZilla ist kostenfrei für alle gängigen Betriebssysteme verfügbar und lässt sich sowohl installieren als auch portabel auf USB-Stick verwenden. FileZilla bietet sowohl normalen (nicht verschlüsselten) Daten-Transport mit FTP als auch Verschlüsselung mit SFTP.

SCP (Secure Copy)

bietet die Möglichkeit, beliebige Dateien verschlüsselt mit SSH zu übertragen. SCP wird heute meist durch SFTP ersetzt.
Beispiel:   Das kostenfreie Windows-Programm WinSCP kann man installieren oder portabel auf USB-Stick verwenden.

X11 (X-Window System)

wird auf Linux-Systemen zur grafischen Darstellung von Dsktop- und Fenster-Programmen verwendet.

Die X11-Befehle erfolgen in Klartext und lassen sich mit SSH verschlüsselt übertragen. Das bietet die Möglichkeit, Linux-(Fenster)-Programme oder den gesamten Linux-Desktop rasch und sicher über das Netzwerk zu steuern.

Allerdings muss der Linux-Server diese Art der Fernsteuerung ausdrücklich zulassen.

Auf Linux sind dazu keine Zusatz-Programme erforderlich. Mit dem Windows-Programm Xming kann man jeden dafür eingerichteten Linux-Server bequem und sicher fernsteuern.

Datenbank-Server

Die meisten → Datenbank-Server akzeptiern aus Sicherheits-Gründen nur Aufträge vom eigenen Server-PC, d.h. von der Standard-Adresse localhost
Das ist kein Widerspruch zu einer sinnvollen Verwendung, denn das gesamte User-Interface für übliche Datenbank-Server wird normalerweise von einem → Webserver am gleichen (eigenen) PC verwaltet.

Wenn man einen Datenbank-Server zur Administration mit Konsolen-Befehlen fernsteuern will (z.B. mit dem DB-Client-Programm mysql, dann lehnt dieser die Verbindung aus Sicherheits-Gründen ab, und zwar selbst dann, wenn der Firewall diese Verbindung (Port 3306) erlaubt.

SSH bietet eine Lösung: Man richtet eine Verbindung zum Server-PC ein und startet in dieser SSH-Konsole das DB-Client-Programm mysql
Dieses Programm läuft nun am Server-PC (!) und wird daher vom Datenbank-Server zugelassen.

Tunnel

Im Prinzip kann man jede Verbindung über SSH leiten, wenn ein beliebiges Server-Client-Paar sich über diesen Transport einigt. Die Einrichtung solcher privater Tunnel vom eigenen PC durch das Internet zu einem anderen PC erfordert fortgeschrittene Kenntnisse. Damit kann man allerdings meist auch 'paranoid' eingestellte Router und Firewalls überwinden.

SSHFS

Dieses System wird selten eingesetzt und erlaubt die gesicherte Übertragung eines gesamten entfernten Dateisystems (→ FileServer).

SSH Voraussetzungen

Server-PC + Client-PC

Eine Fernsteuerung macht nur dann Sinn, wenn das gesteuerte Gerät (SSH-Server) und das Arbeitsgerät (SSH-Client) unterschiedlich sind. Das ist allerdings keine technische Bedingung, denn zum Test kann man auch den eigenen PC mit SSH steuern.

Netzwerk

Die Verbindung zwischen Server und Client muss nachweislich funktionieren.

Verbindungs-Daten

Zur Verbindung benötigt man mindestens die IP-Adresse oder den äquivalenten Domain-Namen des entfernten SSH-Servers.

Firewall

Alle beteiligten Firewalls (Server, Client, Router) müssen den Transport von SSH-Daten erlauben.

Software

Am Server-PC muss ein SSH-Server-Programm laufen, d.h. es muss installiert und gestartet sein.
Am Client-PC wird ein SSH-Client-Programm gestartet. Dieses verlangt die Angabe der Server-Adressem und nach erfolgreicher Verbindung die Eingabe von User-Name und Passwort. Danach ist die Fern-Bedienung der server-Konsole möglich.

Zugangs-Rechte

Der Zugang zum SSH-Server muss durch Firewalls und Router erlaubt werden. Das ist vom Standort des Client-PC (=von seiner IP-Adresse) abhängig.
Nach erfolgreicher Verbindung muss man die persönlichen Zugangs-Daten (Name, Passwort) eingeben. Der SSH-Server kann darüber hinaus weitere Regeln anwenden, welche die Zugangs-Rechte im Sinne hoher Sicherheit meist noch einschränken.

Konsolen-Kenntnisse

Eine SSH-Verbindung kann man nur dann sinnvoll nutzen, wenn man wenigstens die wichtigsten Konsolen-Befehle kennt.
Auf Linux kann man mit der Anweisung man (Manual) zu den meisten Befehlen Hilfe anzeigen, z.B.
$ man ls

Auf Windows kann man oft mit dem Prefix help oder mit dem Postfix /? Hilfe anzeigen:
C:\> help dir
C:\> dir /?

Wenn die Fernbedienung auch durch wenig erfahrene User gewünscht wird, dann hat es sich bewährt,dafür einfache interaktive Konsolen-Programme herzustellen.
Diese Programme führen einfache Dialoge, akzeptieren eine minimale Eingabe (z.B. ein Buchstabe, eine Zahl) und führen danach alle für den jeweiligen Zweck programmierten Arbeiten durch.


XHTML CSS