In meinem letzten Beitrag haben wir mit SSH Keygen die Vorbereitungen für den sicheren SSH-Zugang abgeschlossen.

Hier ist der letzte Beitrag: SSH keygen: Der umfassende Leitfaden für Anfänger

Jetzt ist es an der Zeit zu lernen, wie man tatsächlich SSH verwendet, um auf einen Remote-Server zuzugreifen. Die SSH-Befehle sind einfacher als gedacht, aber wenn man ein paar Prinzipien und nützliche Optionen kennt, kann man sie viel effizienter nutzen.


Wie schreibe ich SSH-Befehle?

Das grundlegende Format eines SSH-Befehls ist wie folgt.

ssh [Optionen] [Benutzername]@[Hostadresse] [Befehl]

Schauen wir uns die einzelnen Elemente genauer an.

  1. ssh: Der Befehl, um den SSH-Client auszuführen.

  2. [Optionen]: Hier können Sie verschiedene Optionen zur Steuerung der SSH-Verbindung angeben. Zum Beispiel, um eine bestimmte Schlüsseldatei zu verwenden oder Port-Forwarding einzurichten. (Darüber werden wir später ausführlicher sprechen.)

  3. [Benutzername]: Der Benutzerkontoname des Remote-Servers, zu dem Sie eine Verbindung herstellen möchten. Wenn der Benutzername Ihres lokalen Computers mit dem des Remote-Servers übereinstimmt, kann dies weggelassen werden.

  4. [Hostadresse]: Die IP-Adresse oder der Domainname des Remote-Servers, zu dem Sie eine Verbindung herstellen möchten.

  5. [Befehl] (optional): Wenn Sie nach der SSH-Verbindung einen Befehl auf dem Remote-Server sofort ausführen möchten, geben Sie ihn hier ein. Nach der Ausführung dieses Befehls wird die SSH-Sitzung beendet. Wenn dieser Teil weggelassen wird, können Sie sich anmelden und eine interaktive Shell verwenden.

Prinzipien zum Schreiben von Befehlen und einfache Merksätze

Der SSH-Befehl ist so strukturiert, dass er klar angibt: „Welcher Benutzer verbindet sich mit welchem Server?“

  • Grundprinzip: ssh Benutzername@Hostadresse

    • Beispiel: ssh ubuntu@192.168.1.100 (Verbindung zum ubuntu-Konto auf dem Server 192.168.1.100)
    • Beispiel: ssh root@mywebserver.com (Verbindung zum root-Konto auf dem Server mywebserver.com)
    • Einfacher Merksatz:

    • „Ich (lokaler Benutzer) will zu jemandem (Remote-Benutzer), der da drüben (Remote-Server) ist!“

    • ssh (ich möchte verbinden) [Benutzername]@ (wer) [Hostadresse] (wo)
    • Für häufig genutzte Server können Sie die Datei ~/.ssh/config verwenden, um Aliasnamen zu nutzen, damit Sie nicht jedes Mal die lange Adresse eingeben müssen. (Darüber werden wir im nächsten Beitrag detaillierter sprechen!)

Nützliche SSH-Optionen entschlüsseln

SSH bietet eine Vielzahl von Optionen, die kraftvolle Funktionen für unterschiedliche Situationen bereitstellen. Ich werde einige Schlüsselfunktionen vorstellen.

SSH Fee, die Optionen erklärt

1. -i <IdentityFile>: Bestimmte private Schlüsseldatei angeben

Wenn Sie mehrere SSH-Schlüssel haben und einen bestimmten privaten Schlüssel verwenden möchten, um auf einen bestimmten Server zuzugreifen, verwenden Sie dies. Standardmäßig werden ~/.ssh/id_rsa oder ~/.ssh/id_ed25519 verwendet, aber wenn Sie ihn unter einem anderen Namen erstellt haben oder mehrere Schlüssel verwalten, ist dies praktisch.

  • Verwendung: ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
  • Beispiel:

ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
    Geben Sie den Passphrase für den Schlüssel '/home/youruser/.ssh/id_ed25519_my_server' ein: 

2. -p <Port>: SSH-Port des Remote-Servers angeben

Die meisten SSH-Server verwenden standardmäßig den Port 22. Aus Sicherheitsgründen ändern Administratoren jedoch häufig den SSH-Port. In diesem Fall müssen Sie die Option -p verwenden, um die ändern Portnummer anzugeben.

  • Verwendung: ssh -p 2222 your_user@your_server.com (Verbindung über Port 2222)
  • Beispiel:

    ssh -p 2222 myuser@192.168.1.100
    	Die Authentizität des Hosts '192.168.1.100:2222 (...)' kann nicht festgestellt werden.
    	Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (ja/nein/[Fingerprint])? ja
    	Warnung: '192.168.1.100:2222' (ED25519) dauerhaft zur Liste der bekannten Hosts hinzugefügt.
    	Letzte Anmeldung: Mon Jun 17 10:00:00 2024 von Ihrer_ip
    	myuser@server:~ $

     

3. -X: X11-Forwarding aktivieren (Grafikanwendungen ausführen)

Wenn auf dem Remote-Server eine GUI-Anwendung (Graphical User Interface) installiert ist und Sie diese auf dem Bildschirm Ihres lokalen Computers verwenden möchten, verwenden Sie dies. Es wird das X Window System verwendet, und auf dem lokalen System muss ein X-Server aktiv sein (macOS benötigt XQuartz, Windows benötigt PuTTY + VcXsrv usw.).

  • Verwendung: ssh -X your_user@your_server.com
  • Beispiel:

        ssh -X myuser@remote-gui-server.com
        myuser@remote-gui-server:~ $ firefox &

    Nach der Verbindung wird firefox auf dem Remote-Server ausgeführt (das firefox-Fenster erscheint lokal).
    Wenn die Leistung schlecht ist oder starke Netzwerkverzögerungen bestehen, kann es unpraktisch sein.

4. -L <LocalPort>:<RemoteHost>:<RemotePort>: Lokales Port-Forwarding (Local Port Forwarding)

Diese Funktion leitet Verbindungen, die auf einen bestimmten Port (LocalPort) des lokalen Computers eingehen, über einen SSH-Tunnel an einen bestimmten Port (RemotePort) des Remote-Servers (RemoteHost) weiter. Dies ist nützlich, um auf Services hinter einer Firewall zuzugreifen oder wenn eine lokal entwickelte Anwendung auf eine Remote-Datenbank zugreifen muss.

  • Verwendung: ssh -L 8080:localhost:80 your_user@your_server.com
    • Dieser Befehl leitet alle Verbindungen, die auf den Port 8080 des lokalen Computers eingehen, über your_server.com an den Port 80 innerhalb von your_server.com weiter ( localhost:80 bezieht sich auf your_server.com selbst).
  • Beispiel:

    • Wenn Sie nicht direkt auf den Webserver (Port 80) des Remote-Servers zugreifen können und nur SSH verwenden können:

       ssh -L 8080:localhost:80 myuser@my_web_server.com

        Wenn Sie diesen Befehl ausführen und in Ihrem lokalen Webbrowser auf http://localhost:8080 zugreifen,
        tatsächlich eine Verbindung zum Port 80 von my_web_server.com herstellen.

    • Wenn die lokale Anwendung my_db_app auf den MySQL-Port 3306 von db_server.internal zugreifen soll und db_server.internal nur über my_app_server.com zugänglich ist:

      ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com

             Wenn Sie diesen Befehl ausführen und my_db_app lokal auf localhost:3307 zugreifen,
             wird die Verbindung über my_app_server.com zum Port 3306 von db_server.internal hergestellt.

      • (Der Grund, warum Port 3307 verwendet wird, ist, dass es bereits eine MySQL-Anwendung auf Port 3306 lokal geben könnte.)

5. -N: Nur Port-Forwarding aufrechterhalten, ohne Remote-Befehle auszuführen

In Kombination mit der Option -L oder -D (Dynamic Port Forwarding, SOCKS-Proxy) wird diese Option verwendet, um eine SSH-Sitzung zu öffnen, ohne Shell-Befehle auf dem Remote-Server auszuführen, sondern nur die Port-Forwarding-Funktion aufrechtzuerhalten. Dies ist nützlich, um ein Port-Forwarding-Tunnel im Hintergrund aufrechtzuerhalten.

  • Verwendung: ssh -N -L 8080:localhost:80 your_user@your_server.com
  • Beispiel:

    ssh -N -L 8080:localhost:80 myuser@my_web_server.com &

        Halten Sie das Port-Forwarding-Tunnel im Hintergrund (&) offen und ermöglichen Sie den Zugriff von Ihrem lokalen Webbrowser aus

6. -f: SSH-Sitzung in den Hintergrund versetzen

Diese Option wird verwendet, um den SSH-Client-Prozess in den Hintergrund zu versetzen, nachdem die SSH-Verbindung erfolgreich hergestellt wurde. Es wird häufig mit der Option -N verwendet, um ein Port-Forwarding-Tunnel im Hintergrund aufrechtzuerhalten.

  • Verwendung: ssh -f -N -L 8080:localhost:80 your_user@your_server.com
  • Beispiel:

    ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com

        Wenn Sie diesen Befehl ausführen, wird sofort die Kontrolle über das Terminal zurückgegeben und das SSH-Tunnel läuft im Hintergrund.
        Sie können den Prozess mit dem Befehl ps aux | grep ssh überprüfen


Fazit

In diesem Beitrag haben wir die grundlegende Struktur des SSH-Befehls sowie die häufig verwendeten Schlüsseloptionen betrachtet. Insbesondere die Portangabe mit -p und das Port-Forwarding mit -L werden in der Praxis häufig verwendet, also empfehle ich Ihnen, sich diese gut einzuprägen.

Im nächsten Beitrag werden wir lernen, wie man mit der Datei ~/.ssh/config den SSH-Zugang noch einfacher verwalten kann. Bei Fragen können Sie jederzeit einen Kommentar hinterlassen!