Inhaltsverzeichnis

Secure Shell

Ähnlich wie Telnet kann die Secure Shell (ssh) dazu verwendet werden, eine Kommandozeile auf einem entfernten Rechner zu starten. Mit ssh wird aber immer die Verbindung aber verschlüsselt.

Zusätzlich kann ssh auch dazu verwendet werden, um TCP-Ports zwischen verschiedenen Rechnern zu tunneln (Portweiterleitung) und es ist sogar möglich ein einfaches VPN aufzubauen.

Eingabeaufforderung

Eine Eingabeaufforderung auf einem entfernten System kann mit dem Befehl

$ ssh <user>@<host>

über das Standardport 22 geöffnet werden. Ein anderes Port kann durch die Angabe des Parameters -p <port-nr> verwendet werden.

Befehle ausführen

ssh kann ebenfalls dazu verwendet werden, um einen oder mehrere Befehle am entfernten System auszuführen ohne, dass eine Shell geöffnet wird. D. h. eine Befehlseingabe durch den Benutzer kann auf dem Fremdsystem so vermieden werden. Ein einzelner Befehl kann mit

$ ssh <user>@<host> <befehl1>

ausgeführt werden. Zum Ausführen einer ganze Folge von Befehlen dient folgender Befehl:

$ ssh <user>@<host> "( <befehl1>; <befehl2>; ... <befehlX>; )"

Benutzerauthentifizierung

Neben der Eingabe eines Passwortes, kann die Authentifizierung des Benutzers ebenfalls über das Private-/Public-Keypair des Benutzers erfolgen. Dies ist nicht nur eine sichere sondern auch einfache Methode um vollautomatisch innerhalb eines Skripts auf einen entfernten Rechner zuzugreifen.

Für jeden Benutzer der eine Verbindung aufbaut, muss zunächst ein Schlüsselpaar generiert werden:

$ ssh-keygen -t dsa

Damit wird standardmäßig im Verzeichnis ~<username>/.ssh/ der Private-Key (id_dsa) und der Public-Key (id_dsa.pub) erzeugt. Auf Wunsch kann der Schlüssel mit einem Passwort versehen werden oder ungeschützt bleiben. Das Passwort kann auch nachträglich verändert werden mit:

$ ssh-keygen -p

Wenn kein Passwort für den Schlüssel angegeben wird, kann sich jeder der Zugriff auf den Private-Key erlangt, auf allen authorisierten Fremdsystemen Anmelden!

!!!Der Private-Key muss daher immer geheimgehalten werden!!!

Um sich nun auf einem entfernten System als ein bestimmter Benutzer anmelden zu können, muss zunächst der Public-Key in der Datei ~<remote-username>/.ssh/authorized_keys des Benutzers am entfernten System hinzugefügt werden. Mit folgenden Befehlen wird der eigene Schlüssel übermittelt:

scp ~/.ssh/id_dsa.pub <remote-username>@<remote-hostname>:/tmp/
ssh <remote-username>@<remote-hostname> "( cat /tmp/id_dsa.pub >> .ssh/authorized_keys; rm /tmp/id_dsa.pub; )"

Danach funktioniert die Anmeldung mittels Private-Key.

Eine mögliche praktische Anwendung der Private-/Publik-Keyauthentifizierung ist das automatische Backup von Verzeichnissen auf ein entferntes System.

Port-Weiterleitung

Einzelne Ports können einfach mit ssh weitergeleitet werden. Damit ist es möglich von außen über einen Firewall auf Dienste eines privaten Netzwerks zuzugreifen. Dazu braucht man nur einen Zugriff mittels ssh auf den Firewall direkt oder auf eines der internen Systeme.

Der dazu notwendige Befehl lautet:

$ ssh -Nf -L <local-port>:<private-ip/hostname>:<remote-port> <remote-username>@<ssh-server>

Der Befehl stellt eine Verbindung zu einem entfernten Rechner her und leitet ein Port aus dem privaten Netzwerk auf ein lokales Port weiter. Der ssh-Server auf den zugegriffen wird, muss natürlich vom eigenen Rechner aus direkt erreichbar sein. Eine Kommandozeile wird dabei nicht geöffnet. Der aufgebaute Tunnel bleibt bestehen bis der Prozess gekillt wird.

Als Beispiel sei hier das folgende Szenario gegeben: Es soll auf auf einen, nur intern erreichbaren, Web-Server (IP-Nummer: 192.168.1.50, Port: 80) zugegriffen werden. Es kann eine Verbindung mittels ssh zum Firewall hergestellt werden (Hostname: server1.example.com). Der Befehl lautet:

$ ssh -Nf -L 1080:192.168.1.50:80 user1@server1.example.com

Danach kann über den Webbrowser über das lokale Port 1080 auf den entfernten Webserver zugegriffen werden:

http://localhost:1080

Mit ssh können nur TCP-Ports weitergeleitet werden.

Terminal-Server mit ssh

Ein sehr einfacher Terminal-Server zwischen zwei Linux-Systemen kann mit ssh ebenfalls aufgebaut werden. Dazu dient die Option -X. Dadurch werden alle Ports für X-Windows von einem entfernten System geholt und das GUI kann lokal angezeigt werden.

$ ssh -X <remote-username>@<remote-hostname> kmail

Mit diesem Befehl wird das Programm kmail auf dem entfernten Rechner gestartet aber lokal angezeigt.

ssh unter Windows

Ein hervorragender ssh-Client für Windows ist das Programm PuTTY. In einem Userinterface können verschiedene Sitzungen abgespeichert werden. Auch die Portweiterleitung wird unterstützt.

Siehe auch