SSH – Secure Shell

Veröffentlicht von Thomas Krupa am

SSH ist ein viel benutztes Tool unter den Linuxsystemadministratoren. Mit Hilfe von Secure Shell lassen sich sichere Netzwerkverbindungen zu anderen Geräten herstellen, etwa von einem PC zu einem Webserver. SSH ermöglicht die gegenseitige Authentifizierung und eine verschlüsselte Datenübertragung, so dass sensible Daten wie Passwörter oder Benutzernamen nicht von Unberechtigten ausgespäht werden können.

Es handelt sich um ein älteres und sehr bewährtes Protokoll, das keine grafische Oberfläche (GUI) benötigt oder anbietet. Aus diesem Grund arbeitet es sehr effizient und belegt nur sehr geringe Ressourcen.

Das Einloggen auf entfernten Rechnern ist ja den SSH-Nutzern bekannt. Was man mit SSH noch alles machen kann soll dieser Beitrag beschreiben.

Einloggen ohne Passwort

Man kann SSH so konfigurieren, dass ein Login ohne Passwort möglich ist. Dies ist zum Beispiel notwendig, wenn sie Aufgaben automatisieren möchten. Zuerst wird am Client (Rechner A) ein Schlüsselpaar erzeugt – ohne Passphrase.

ssh-keygen -t rsa

Standardmäßig ist die Schlüsselänge 2048. Diese kann mit dem Parameter „-b WERT“ entsprechend erhöht werden.

ssh-keygen -t rsa -b 4096

Es werden zwei Dateien erzeugt (id_rsa und id_rsa.pub), der private und der öffentliche Schlüssel. Diese findet man standardmäßig im Verzeichnis ~/.ssh/
Die .pub-Datei kann nun auf den Zielhost kopiert werden und dort an ~/.ssh/authorized_keys angehängt werden:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-system

oder falls ssh-copy-id nicht vorhanden ist mit

cat ~/.ssh/*.pub | ssh user@remote-system 'umask 077; cat >>.ssh/authorized_keys'

In Abhängigkeit von Ihrer SSH-Version kann es sein, dass Sie noch folgendes beachten müssen:

  • Die Berechtigungsdatei heißt eventuell authorized_keys2.
  • Die Rechte von .ssh müssen eventuell 700 sein (chmod 700 .ssh).
  • Die Rechte von .ssh/authorized_keys2 müssen eventuell 640 sein.

Ein automatischer Login ist somit möglich. Der private Schlüssel muss noch mitgegeben werden:

ssh -i ~/.ssh/id_rsa user@remote-system

Wer sich den Parameter -i auch noch sparen möchte, kann eine config unter ~/.ssh/config erstellen und sich dann mit ssh remote einloggen

Host remote
     HostName remote-system
     Port 22
     User linux-rocks
     IdentityFile ~/.ssh/id_rsa

SSH-Tunnel auch bekannt unter Port-Forwarding

SSH-Sitzungen erlauben standardmäßig das Tunneln von Netzwerkverbindungen, und es gibt drei Arten der SSH-Portweiterleitung: lokale, entfernte und dynamische Portweiterleitung.

Lokale SSH-Port-Weiterleitung
Bei dieser Art der Portweiterleitung können Sie von Ihrem lokalen Computer aus eine Verbindung zu einem entfernten Server herstellen. Angenommen, Sie befinden sich hinter einer restriktiven Firewall oder werden durch eine ausgehende Firewall daran gehindert, auf eine Anwendung zuzugreifen, die auf Port 5000 auf Ihrem Remote-Server läuft.
Sie können einen lokalen Port (z.B. 8080) weiterleiten, über den Sie dann wie folgt lokal auf die Anwendung zugreifen können. Das Kennzeichen -L definiert den lokalen Port, der an den Remote-Host und den Remote-Port weitergeleitet wird.

$ ssh user@remote-system -L 8080:remote-system:5000

Öffnen Sie nun auf Ihrem lokalen Rechner einen Browser. Anstatt auf die Remote-Anwendung über die Adresse remote-system:5000 zuzugreifen, können Sie einfach localhost:8080 verwenden.
Somit kann man auch interne Webanwendung (Pi-Hole, Firewall, Switches, WLan-Mgmt Console,…) von zu Hause erreichen, ohne sie öffentlich zugänglich machen zu müssen.
Aber nicht nur das. Man kann damit auch z.B. Dateien via rsync kopieren oder einen backup einer Datenbank mit mysqldump ziehen.
Hier ein kleines Beispielskript:

#/bin/bash
ssh -f -TNL 5002:mysql.remote-server:3306 -i ~.ssh/id_rsa user@remote-system
 sleep 10
mysqldump -u DBUSER --password='DBPASSWORD' -h 127.0.0.1 -P 5002 --databases MYDATABASE --max_allowed_packet=512M >~/sqlbackup.`date +%Y%m%d`.sql

Das Hinzufügen des Kennzeichens -N bedeutet, dass Sie keinen Remote-Befehl ausführen, Sie erhalten in diesem Fall keine Shell.

Der Schalter -f weist ssh an, im Hintergrund zu laufen – führt also dann den nächsten Befehl im Skript aus.
Falls mysql dann doch nicht auf Port 3306 lauscht, kann man den Port auch auf den Socket weiterleiten.

 ssh user@remote-system -TNL 5002:/var/run/mysqld/mysqld.sock

Remote-Port-Weiterleitung

Die Remote-Port-Weiterleitung ermöglicht es Ihnen, eine Verbindung von Ihrem entfernten Rechner zum lokalen Rechner herzustellen. Standardmäßig erlaubt SSH keine entfernte Portweiterleitung. Sie können dies mit der GatewayPorts-Direktive in Ihrer SSHD-konfigurationsdatei /etc/ssh/sshd_config auf dem entfernten Rechner aktivieren.

GatewayPorts yes

Speichern Sie die Änderungen starten sie sshd neu.

Führen Sie als nächstes den folgenden Befehl aus, um Port 5000 auf dem Remote-Rechner an Port 8090 auf dem lokalen Rechner weiterzuleiten.

$ ssh -f -N user@remote-server -R 5000:localhost:8090

Dynamische SSH-Port-Weiterleitung

Dies ist die dritte Art der Portweiterleitung. Im Gegensatz zur lokalen und entfernten Portweiterleitung, die die Kommunikation mit einem einzigen Port ermöglicht, ermöglicht sie eine vollständige TCP-Kommunikation über eine Reihe von Ports. Bei der dynamischen Anschlussweiterleitung wird Ihr Rechner als SOCKS-Proxyserver eingerichtet, der standardmäßig auf Anschluss 1080 lauscht.

Zunächst einmal ist SOCKS ein Internet-Protokoll, das definiert, wie ein Client über einen Proxy-Server (in diesem Fall SSH) eine Verbindung zu einem Server herstellen kann. Sie können die dynamische Portweiterleitung mit der Option -D aktivieren.

Mit dem folgenden Befehl wird ein SOCKS-Proxy auf Port 6000 gestartet, über den Sie eine Verbindung mit dem entfernten Host herstellen können.

$ ssh -f -N -D 6000 user@remote-server

Von nun an können Sie Anwendungen auf Ihrem Rechner dazu veranlassen, diesen SSH-Proxyserver zu verwenden, indem Sie ihre Einstellungen bearbeiten und sie so konfigurieren, dass sie diesen verwenden, um eine Verbindung zu Ihrem Remote-Server herzustellen. Zum Beispiel können Sie Firfox öffnen, die Proxy-Einstellungen entsprechend ändern (SocksHost localhost, Port 6000). Rufen Sie dann mal die Seite https://whatismyipaddress.com auf. Ihr Browser sollte jetzt die IP des SSH-Servers anzeigen. Klar sollte sein, dass der SOCKS-Proxy nicht mehr funktioniert, nachdem Sie Ihre SSH-Sitzung geschlossen haben.

Auch Windows-Nutzer können mit dem Programm Putty die Tunnels nützen. Man kann sie im Abschnitt SSH ==> Tunnel konfigurieren.


2 Kommentare

Stefan · 19.06.2020 um 08:12

Nicer Artikel, evtl. schreibst du noch beim Erstellen des Schlüssels eine kurze Erklärung zu Schlüssellänge dazu!
greetings!

    Thomas Krupa · 19.06.2020 um 08:32

    Danke für dein Feedback. Ich hab den Artikel aktualisiert.

Schreibe einen Kommentar zu Thomas Krupa Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.