SSH-Tunnel (Portweiterleitung) vs. SSH-ProxyJump, welchen sollte ich in diesem speziellen Fall verwenden, Ich -> JumpSever -> Zielserver

SSH-Tunnel (Portweiterleitung) vs. SSH-ProxyJump, welchen sollte ich in diesem speziellen Fall verwenden, Ich -> JumpSever -> Zielserver

Ich bin neu bei SSH Tunnel, ich habe gelesen,Wikibook von OpenSSH Proxyimmer und immer wieder, immer noch so verwirrt.

Das Ziel ist der Aufbau eines doppelten Proxys mit ausschließlich SSH-Tunneln (Portweiterleitung) oder ProxyJump (ich bin mir nicht sicher, wie ich sie nennen soll).

Wenn ich beispielsweise me 192.168.1.1-->verbinden mit--> the Jump ServerA 1.1.1.1, erreiche ich tatsächlich . the Target ServerB 2.2.2.2Wenn ich einen Socks5-Proxy mit einrichte ServerA 1.1.1.1, werde ich letztendlich von als Proxy verwendet.ServerB's IP 2.2.2.2

Ich weiß, wie man damit umgehtme >-bis-> Server A, Aber ich weiß nicht, wie ich damit umgehen sollServer A >-bis-> Server B, (Ich meine, ich habe vollen Zugriff und Root-Rechte für diese Server, weiß aber nicht, wie ich sie einrichten soll.)

Ich lerne sehr langsam, alle Ideen wären sehr willkommen,

(Ich hätte nichts dagegen, wenn Sie einen genauen Befehl oder Ansatz für dieses Beispiel posten würden. Das würde sehr helfen.)

Antwort1

Grundsätzliche Voraussetzungen sind:

  • ServerB darf nur von ServerA aus erreichbar sein. Sie stellen keine direkte Verbindung zu ihm her.
  • Auf ServerA muss TCP-Tunneling aktiviert sein.
  • ServerA muss für Sie erreichbar sein.

Sie richten die Verbindung zu ServerB über einen Jumphost ein (in .ssh/config):

Host ServerB
    ProxyJump ServerA

Dies setzt voraus, dass Sie, wenn Sie eingeben ssh ServerA, auf ServerA landen, und wenn Sie, während Sie auf ServerA sind, eingeben ssh ServerB, auf ServerB landen. Beispielsweise sollte der Name „ServerB“ auf ServerA auflösbar sein, aber es ist egal, ob er auf Ihrer Seite auflösbar ist. Dies könnten Hostnamen oder „Slugs“ (Spitznamen) sein. Im letzteren Fall verknüpfen Sie ihre Hostnamen oder IP-Adressen erneut in .ssh/config:

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Sie können auch angeben, welcher Benutzername für den Proxy-Host verwendet werden soll:

Host ServerA
    User proxyuser
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Danach geben Sie ein ssh ServerB. OpenSSH stellt eine Verbindung zu ServerA her und verwendet einen zufälligen Port, um über diese Verbindung an die Adresse von ServerB, Port 22, weiterzuleiten. Diese Verbindung wird in den Hintergrund verzweigt; OpenSSH stellt sofort eine Verbindung zu diesem zufällig weitergeleiteten Port her (zu localhost, aber es prüft seinen Schlüssel tatsächlich anhand .ssh/known_hostsdes Namens „ServerB“ und der in HostName angegebenen IP-Adresse, falls vorhanden), sodass Sie direkt auf ServerB landen. Wenn Sie „who“ eingeben, wird Ihnen mitgeteilt, dass Sie von der Adresse ServerA aus verbunden sind. Jeder, der zwischen Ihnen und ServerA sitzt, kann nicht wissen, dass Sie wirklich mit ServerB sprechen.

Sie können beliebige SSH-Befehlszeilenoptionen verwenden. Diese werden verwendet fürServerBVerbindung (hergestellt über weitergeleiteten Port). Wenn Sie beispielsweise verwenden ssh -D 12345 user@ServerB, wird eine Verbindung zu ServerA als Proxybenutzer hergestellt, wobei der Port an ServerB:22 weitergeleitet wird. Anschließend wird eine Verbindung zu diesem Port hergestellt und eine Authentifizierung gegenüber ServerB als Benutzer durchgeführt. Außerdem wird ein SOCKS5-Proxy auf Port 12345 installiert. Die Ausgangsadresse für diesen SOCKS5 wäre ServerB. Wenn Sie beispielsweise diesen Proxy verwenden (z. B. in einem Browser), sehen Remote-Teilnehmer, dass Sie sich von der Adresse von ServerB aus verbinden.

Sie können mehrere Jumphosts stapeln, das funktioniert auch:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

und ssh ServerCstellt zuerst eine Verbindung zu ServerA mit Portweiterleitung zu ServerB:22 her, stellt dann über diese Weiterleitung eine Verbindung zu ServerB mit einer weiteren Portweiterleitung zu ServerC her und stellt dann eine Verbindung zu diesem anderen Port her, und Sie gelangen zur ServerC-Shell.

Beachten Sie, dass Sie nach einem Passwort gefragt werden fürjedeVerbindung. Das ist ziemlich umständlich. Richten Sie besser eine schlüsselbasierte Authentifizierung ein und verwenden Sie ssh-agent.

verwandte Informationen