SSH - die Secure Shell

Problem

Will man auf einen anderen Rechner so zugreifen, dass man dort z.B. Befehle eingeben oder Dateien übertragen kann, so braucht man einen entsprechenden Dienst auf diesem Rechner. Er sollte sicher und vielseitig verwendbar sein.

Idee

SSH ist so ein Dienst und ist bestens etabliert und lässt sich erstaunlich vielfältig nutzen.

Auf dem entfernten Rechner muss dazu i.d.R. ein ssh-Dienst (z.B. openssh-server) laufen. Der eigene Rechner benötigt dann den passenden Client (openssh-client unter Linux und Windows 10, putty unter Windows 7).

Die Kontaktaufnahme initiiert der Client indem er per TCP/IP den Server auf einem bestimmten Port (Standard:22) anspricht. Dabei muss sich der Server mit einem Zertifikat ausweisen. Der Client muss sich mit Passwort oder auch einem Zertifikat anmelden - siehe unten.

Standardanwendungen

Shell auf dem Zielserver benutzen

Mit dem Befehl

ssh user@servername

meldet man sich an dem Server an und erhält eine shell, d.h. man kann nun Betriebssystembefehle eingeben. Mit dem Befehl

ssh -c user@servername -p 12321 -t top

wird der Server auf der Portnummer 12321 aufgerufen, die Komprimierung eingeschaltet und mit einer robusteren Terminalemulation der Befehl top gestartet. Mit -t ist auch ein sudo-Befehl mit interaktiver Passworteingabe möglich.

Portweiterleitung nutzen

Szenario: Man möchte einen Heizungsrechner (oder Stundenplanrechner) per RDP (Portnummer 3389) erreichen. Diesen Port im Internet direkt freizugeben erfordert Mut und viel Wissen (z.b. wie verhindert man ein Downgrade der Sicherheitseinstellungen). Besser ist es, wenn man aus dem Internet einen Gatewayserver per ssh auf einem ungewöhnlichen Port erreicht. Dieser wiederum kann dann den Heizungsserver auf seinem Port erreichen.

Schritt 1: Auf der Kommandozeile oder in einem Skript ruft man auf:

ssh -L 33389:heizungsrechner:3389 user@gatewayserver -p 12321

Schritt 2: Man startet einen RDP-Viewer und verbindet sich mit localhost:33389, nutzt dann aber Name und Passwort des Heizungsrechners.
Nun kann man an dem Rechner arbeiten. Schließlich beendet man den Viewer.

Schritt 3: Man beendet wieder den ssh-Task von Schritt 1.

Graphisches Programm für Xserver remote benutzen

Mit dem Befehl

ssh -X user@servername xeyes

startet man das Programm xeyes, dessen Ausgabe nicht auf dem Serverbildschirm, sondern via SSH zum eigenen Bildschirm weitergeleitet wird. So kann man dann auch einen graphischen Editor oder einen Browser starten, wird aber teilweise von der Performance enttäuscht sein.

Best Practise

Man sollte bei ssh im Internet nicht mit Passwörtern sondern nur mit Keys arbeiten. ssh -X name@server

ssh-keygen -t rsa

ssh-copy-id name@server

Stellt eine Verbindung zum Server her. Dabei wird der Useraccount name genutzt (mit X-Forwarding). Nachdem einmalig ssh-keygen auf der Workstation ausgeführt wurde, kopiert man diesen Key auf jeden Server. So kann man sich ohne Passwort dort anmelden. Nun kann auch die originale PermitRootLogin-Zeile wiederhergestellt werden

Man kann auch den ssh-Server so konfigurieren, dass er aus einem bestimmten Netz oder von einer bestimmten IP-Adresse aus mit Passwort, sonst aber nur per key zu erreichen ist. Dokumentieren!

SSH-Sicherheit

Verbindet man einen Rechner ungeschützt mit dem Internet, so werden innerhalb kürzester Zeit automatische „Angriffe“ (eigentlich nur unberechtigte Loginversuche) auf einen vorhandenen SSH-Dienst einprasseln. Es wird versucht sich mit Standardloginnamen (root, admin, administrator usw.) mit Standardpasswörtern (password, password1, passw0rd, 12345678 usw.) anzumelden. Da Computer dieses Ziel hartnäckig verfolgen, kann ein Glückstreffer zum Unglück des Serverbesitzers führen. Außerdem werden Logfiles und Internetverbindung gefüllt.

Ausweg aus dem Sicherheitsproblem: Erlaube ein Login nur für User mit SSH-key, nicht mit Passwort. Dieser ist mit realistischem Aufwand nicht zu fälschen.

Ausweg aus der unnötigen Serverlast: Lege den Port, auf dem der SSH-Server lauscht von 22 auf einen individuellen hohen Port, z.B. 34121. Oder die Postleitzahl, was man sich besser merken kann. Natürlich hilft das nicht bei der Sicherheit, denn man kann natürlich alle Ports des Servers abklappern und findet ihn dann. Das ist aber eher ein gezielter Angriff als nur ein Loginversuch. (Mit Port-Knocking kann man den Port zusätzlich verschleiern. Dies ist aber wieder etwas aus der Mode gekommen…)

Test