SSH-Tunnel zur Vergrößerung der Entwicklungsumgebung

In diesem Artikel zeige ich euch, wie ihr SSH benutzt, um Server zu erreichen und mit eurer Entwicklungsumgebung zu verbinden. Auf diese Weise kann ich die in meiner IDE gestartete Anwendung durch einen SSH-Tunnel z.B. mit der Datenbank in unserer Testumgebung verbinden, um die dort vorhandenen Testdaten zu nutzen.

Setup

Auf meinen Windows Notebook verwende ich meist putty oder eine emulierte Linux Bash, wie zum Beispiel die Git BASH:
In diesem Artikel werde ich mich auf die Linux basierte Variante konzentrieren.

SSH in der Linux Shell

Vermutlich kennt ihr SSH schon, daher verlinke ich hier auch nur zu Wikipedia.
Im folgenden zeige ich, wie man sich mittels private-public-Key mit einem SSH-Service verbindet.
Dazu muss auf der Server-Seite der öffentliche Schlüssel (public Key), passend zum privaten Schlüssel (private Key) hinterlegt sein.

SSH Agent starten und private Key laden

Zuerst benötigen wir einen laufenden SSH Agent, da dieser unseren privaten (private Key) Schlüssel verwaltet. Den SSH Agent können wir mit folgendem Befehl starten, so dass er dauerhaft im Hintergrund unseres Shell-Terminal läuft:
    
    eval `ssh-agent -s`

Bei diesem Befehl ist es sogar wichtig, dass ihr die richtigen Anführungszeichen verwendet. Danach könnt ihr mit folgendem Befehl euren privaten Schlüssel hinzufügen:

    ssh-add <Pfad zum privaten Schlüssel>

Falls euer privater Schlüssel mit im Standard-Verzeichnis mit dem Standard-Namen abgelegt ist, könnt ihr den Pfad weglassen. Der private Schlüssel muss also in dieser Datei sein ~/.ssh/id_rsa.

Ob alles funktioniert hat könnt ihr mit diesem Befehl testen:

    ssh-add -l

Hat es funktioniert sehr ihr Infos zu eurem SSH-Key. Falls etwas schief ging, gibt es typischerweise eine der beiden folgenden Fehlermeldungen:
  1. Could not open a connection to your authentication agent.
    In diesem Fall wurde der SSH Agent nicht richtig gestartet.
  2. The agent has no identities.
    Diese Meldung sagt, dass das hinzufügen des privaten Schlüssels nicht funktioniert hat.

SSH Verbindung zum Server mit Tunnel

In der einfachsten Form des SSH-Befehls logt man sich einfach auf einem anderen Server ein:

    ssh <user>@<host>

Sollte es hierbei Probleme geben, haben diese häufig eine der folgenden Ursachen:
  • Falscher Benutzername oder falsche Adresse. 😉
  • Der SSH Agent läuft nicht oder der private Key ist nicht geladen, siehe vorheriger Abschnitt.
  • Ihr benötigt einen Proxy, weil man aus eurem Firmennetz keine SSH-Sessions über Port 22 auf andere Rechner öffnen kann. Falls ihr doch Putty verwendet, könnt ihr den Proxy in der Connection-Konfiguration einstellen. In der Linux Shell funktioniert es, wie hier beschrieben: https://www.shellhacks.com/linux-proxy-server-settings-set-proxy-command-line/
Wenn der einfache SSH-Login funktioniert, könnt ihr als nächstes die benötigten Tunnel aufbauen. Das funktioniert so:

ssh -f -N <user>@<host> -L <local port>:<remote IP>:<remote port>
  • -L definiert die Port-Weiterleitung bzw. den SSH-Tunnel. Zuerst wird der lokale Port festgelegt (z.B. 80), dann der Hostname oder die IP des Tunnelziels (z.B. 10.10.17.02) und nach dem letzten Doppelpunkt die Portnummer des Tunnelziels.
    • -L 80:localhost:8080 leitet den Port 80 des SSH-Client Rechners auf den Port 8080 am SSH-Server weiter - localhost ist hier die SSH-Serverseite.
    • -L 3306:mysqldb:3306 bei diesem Tunnel fungiert der SSH-Server als Zwischenstation. Da mein Notebook durch Firewalls den direkten Zugriff auf mysqldb:3306 blockiert hat, logge ich mich mit SSH auf einem Server ein, dessen Zugriff auf die Datenbank erlaubt ist.
  • -f führt den SSH-Befehl im Hintergrund aus, so dass ich z.B. in einer Shell mehrere SSH-Tunnel aufbauen kann.
  • -N führt keine Remote Befehle aus, so dass wir auch keine Shell am SSH-Server bekommen. Wenn es nur um die Tunnel geht, sind diese beiden Optionen praktisch.

SSH-Tunnel in Putty

Ihr könnt die zuvor gezeigten Schritte auch mit Putty machen. Das zeige ich hier aber nur sehr grob:
  1. Zum Starten des SSH Agents, startet ihr das Programm Pageant mit der Datei pageant.exe. Ich packe mir diese Datei gerne in den Windows Autostart.
  2. Rechts-Klick mit der Maus auf Pageant bietet die Option "Add Key" zum Laden des privaten Schlüssels. Das entspricht dem ssh-add Befehl in der Linux Shell.
  3. Danach Putty starten (z.B. mit Rechts-Klick auf Pageant und dann "New Session") und Benutzername und Host festlegen.
    Benutzername "ubuntu" und Host "app01"

  4. Tunnel werden mit Putty innerhalb der Kategorie "Connection => SSH => Tunnels" definiert. Das funktioniert auch analog zu SSH.
    Analoger Tunnel zu -L 3306:mysqldb:3306 in der Shell

Fazit

Mit den hier gezeigten SSH-Befehlen könnt ihr eure lokale Entwicklungsumgebung um Dienste auf anderen Servern erweitern. Das macht SSH bzw. die SSH-Tunnel zu einem wichtigen Werkzeug für Entwickler, z.B. bei der Analyse von Fehlern, die nur in bestimmten Umgebungen auftreten.

Kommentare

Beliebte Posts aus diesem Blog

OpenID Connect mit Spring Boot 3

Authentifizierung in Web-Anwendungen mit Spring Security 6

Validierung per Annotation in Java und Spring