Ubuntu: SSH - Wie und Warum?

SSH ist ein Standard-Netzwerk-Tool, mit dem Verbindungen zu entfernten Geräten aufgebaut werden können. Wie das mit Ubuntu funktioniert und warum das Werkzeug so vielseitig ist, lesen Sie hier. Übrigens: Die genaue Bedeutung der Abkürzung SSH ist Secure Shell.

Wie ist SSH?

SSH, also Secure Shell, meint sowohl ein Netzwerkprotokoll als auch die für die Nutzung benötigte Software. Das Ganze dient dazu, eine sichere Verbindung zu einem anderen Rechner im Netzwerk herzustellen, um diesen bedienen zu können. Dazu läuft auf dem entfernten Rechner ein SSH-Server und auf Ihrem lokalen Rechner ein SSH-Client. Sobald man die Verbindung hergestellt hat, ist man auf der Kommandozeile im entfernten Rechner eingeloggt - und kann diesen dann genauso bedienen als würde man davor sitzen. Und das Beste: Wie "Secure" schon andeutet, ist diese Verbindung komplett verschlüsselt.

SSH gibt Ihnen die Möglichkeit, "normale" Rechner fernzusteuern beziehungsweise auf ihnen zu arbeiten. So könnten Sie sich etwa mit einem Rechner im Büro verbinden oder mal eben Updates auf den Geräten von Kindern durchführen. Interssanter ist es aber gerade bei Heimanwendern für Netzwerkgeräte, die gar keinen eigenen Monitor und auch keine Eingabegeräte haben. Per SSH können Sie sich zum Beispiel auf die meisten NAS verbinden, auf Raspberry Pis und Router und hier und da sogar auf Webcams, Drucker und dergleichen.

Zwar geht es hier konkret um Ubuntu, aber das Schöne an SSH ist, dass es sehr universell und fast überall verfügbar ist. Auch vom Smartphone oder Windows aus ist es kein Problem, mal eben auf den Ubuntu-Rechner im Keller zuzugreifen. Oder auch umgekehrt!

Das Ergebnis einer Verbindung ist immer identisch: Sie landen in einer Kommandozeile des entfernten Rechners, angemeldet als einer der dortigen Nutzer.

Eine SSH-Verbindung aufbauen

Im Fall von Ubuntu ist SSH in Form von OpenSSH bereits installiert, Server und Client können sofort genutzt werden. Ansonsten beschränkt sich die Installation aber auch auf ein simples "apt-get install openssh-server openssh-client". Zum Testen benötigen Sie natürlich zwei Rechner, im einfachsten Fall zwei normale Ubuntu-Systeme. Der zweite Rechner darf selbstverständlich auch eine virtuelle Maschine sein. Achten Sie nur darauf, dass diese dann als Netzwerkschnittstelle die "Netzwerkbrücke" hat, damit die VM auch über das Netzwerk erreichbar ist.

Angenommen der entfernte Rechner hat die IP-Adresse "192.168.178.100" und es gibt dort einen Nutzer "admin", dann stellen Sie die Verbindung wie folgt her:

  1. Öffnen Sie einen Terminal über das Startmenü und geben Sie den Befehl "ssh admin@192.168.178.100" ein. Da Sie mit dem Server bislang noch keinen Kontakt hatten, "kennen" sich die Rechner natürlich noch nicht.
  2. Sie werden bei einer ersten Verbindung gefragt, ob Sie sich wirklich mit dem Rechner verbinden wollen und der angezeigten Signatur vertrauen. Sie könnten diese Signatur nun manuell mit dem Server abgleichen, aber so lange Sie sich mit bekannten, eigenen Rechnern verbinden, bestätigen Sie einfach, indem Sie "yes" tippen.
  3. Anschließend werden Sie nach dem Passwort des Nutzers "admin" gefragt - geben Sie hier das ganz normale Passwort ein, das Sie auch am Server direkt verwenden würden. Und damit befinden Sie sich auch schon in der Kommandozeile des Servers. Um diese wieder zu verlassen, tippen Sie "exit".

Links die Kommandozeile des Clients mit dem Anmeldevorgang, rechts die entfernte Kommandozeile des Servers (hier ein QNAP-NAS).

Authentifizierung per Schlüssel

Sie können die Verbindung auch noch deutlich bequemer und/oder sicherer gestalten: Statt einer Name-Passwort-Kombination dürfen Sie auch einen Schlüssel nutzen. Das Prinzip ist eigentlich ganz einfach: Sie erstellen auf dem Client ein Schlüsselpaar aus öffentlichem und privatem Schlüssel. Der private Schlüssel muss geheim bleiben, da Sie mit diesem quasi die Tür zum entfernten Rechner aufschließen können. Der öffentliche Schlüssel ist im Grunde das Schlüsselloch, das Sie am Server in die Tür einbauen. Das Konzept ist sehr nah an echten Türen: Ihren Haustürschlüssel werden Sie tunlichst "geheim" halten, aber Ihr Schlüsselloch darf natürlich jeder sehen.

Starten Sie auf dem Client-Rechner eine Kommandozeile und anschließend die Schlüsselerstellung über "ssh-keygen" (für SSH-Schlüsselgenerator). Zunächst sollen Sie die Datei angeben, die erstellt wird - belassen Sie dort einfach die Vorgabe und bestätigen Sie mit [Enter]. Dann können Sie ein Passwort eingeben, um beim Verbindungsaubau noch eine zusätzliche Schranke einzubauen. Wenn Sie das Passwort weglassen, also einfach mit [Enter] bestätigen, entfällt jegliche Passwortabfrage. Letztlich werden zwei Dateien im versteckten Verzeichnis ".ssh" unterhalb Ihres Nutzerverzeichnisses erstellt: "id_rsa" und "id_rsa.pub". Das "rsa" im Dateinamen steht für die verwendete Kryptographie, muss Sie aber nicht weiter beschäftigen. Die Dateiendung "pub" steht für "Public", ist also der öffentliche Schlüssel.

Um diesen nun zum Server zu kopieren, verwenden Sie folgenden Befehl: "ssh-copy -id .ssh/id_rsa.pub admin@192.168.178.100". Über das "-i" wird angegeben, dass die Identität kopiert werden soll, womit der folgend angegebene öffentliche Schlüssel gemeint ist. Kopiert wird natürlich via SSH, dieses Mal noch mit einer Name-Passwort-Kombination. Anschließend können Sie Verbindungen über den Befehl "ssh admin@192.168.178.100" aufbauen, ohne anschließend noch ein Passwort eingeben zu müssen (sofern Sie bei der Schlüsselerstellung nicht noch ein separates Passwort vergeben haben). Übrigens: Wenn Sie irgendwann mal Skripte laufen lassen möchten, die erst eine SSH-Verbindung aufbauen müssen, ist diese passwortlose Variante natürlich deutlich besser geeignet.

Und nur um alle Sicherheitsbedenken auszuräumen: Ein passwortloser Verbindungsaufbau ist nur möglich, wenn Ihr privater, geheimer Schlüssel in Form der Datei "id_rsa" auf dem Client-Rechner vorhanden ist.

Anwendungen auf SSH-Basis

Nun könnten Sie sich sagen: Wann brauche ich schon mal eine Kommandozeile? SSH kann aber noch viel mehr, wie zwei wirklich tolle, nützliche Beispiele zeigen sollen: X2Go und Xmouse. Xmouse ist eine clevere Android-App, die aus dem Smartphone/Tablet ein Eingabegerät für einen Ubuntu-Rechner macht. Sie können darüber Tastaturtasten senden, Fenster manipulieren und vor allem das Gerät als Touchpad, also als Mausersatz nutzen. Super ist das beispielsweise zum Zeichnen auf dem Rechner, wenn man kein teures Grafiktablett hat. Im Hintergrund werkeln hier vor allem zwei Dinge: Auf dem Ubuntu-Rechner läuf das Tool "Xdotool", welches unter anderem allerlei Tastaturkommandos simulieren kann und Befehle, die vom Smartphone kommen, umsetzt. Die eigentliche Verbindung läuft über SSH! Der große Vorteil daran: Auf dem Ubuntu-Rechner muss kein spezieller Xmouse-Server laufen, sondern nur SSH, das sowieso standardmäßig vorhanden ist.

Xmouse ist eine clevere Fernbedienung, die über SSH funktioniert.

Das eigentliche Killer-Argument ist aber unter dem Stichwort "X11 Forwarding" zu finden. X/X11 steht unter Linux gemeinhin für grafische Anwendungen - und auch diese lassen sich über SSH übertragen. Sie könnten also zum Beispiel ein Bildbearbeitungsprogramm wie Gimp auf dem entfernten Rechner laufen lassen, aber eben aus der Ferne steuern. Das Gimp-Fenster sehen Sie dann einfach nahtlos auf dem lokalen Desktop. Und das funktioniert auch unter Windows! Manuell ist es durchaus mit ein wenig Frickelei verbunden, aber das wunderbare Open-Source-Tool X2Go (übrigens ein Projekt aus Deutschland) macht es einfach: X2Go muss auf Client und Server installiert werden und ermöglicht dann über eine recht simple grafische Oberfläche, Verbindungen herzustellen, die wahlweise einzelne Programme oder gleich den ganzen Desktop des entfernten Rechners auf dem lokalen Monitor anzeigen.

Mit X2Go können Sie komplette entfernte Desktops im Fenster anzeigen lassen.