Wie funktioniert ssh ProxyCommand tatsächlich?

8

Ich bin mit der Verwendung der ProxyCommand-Funktion von ssh vertraut und kann sie verwenden, um durch mehrere Bastion-Hosts zu springen und den endgültigen Host effizient zu erreichen. Aber ich kann einfach nicht verstehen, wie es im Backend tatsächlich funktioniert.

Zum Beispiel. Ich habe die folgende Konfigurationsdatei.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh [email protected] -W %h:%p"

Ich verstehe, dass für die Verbindung zum Host finalder ProxyCommand ausgeführt wird, bevor die Verbindung hergestellt wird final.com. Aber ich kann die Reihenfolge der Verbindungen immer noch nicht verstehen.

Und was macht die Option -W %h:%p? Ich verstehe, dass es die Netcat-Funktion ist und ähnlich ist nc %h %p.

Soweit ich das verstehe, ist hier die Abfolge der Operationen. Bitte lassen Sie mich wissen, wenn ich falsch liege. Ich werde die oben in meinem Beispiel angegebene Konfigurationsdatei verwenden.

  1. Der Benutzer tritt ein ssh final
  2. Eine SSH-Verbindung zu bastion.com wurde erstellt.
  3. Ein Netcat-Tunnel wird von bastion.com zu Port 22 von final.com erstellt. Der Standard von netcat ist mit der Shell verbunden, die in der Verbindung zu bastion.com erhalten wurde.
  4. Jetzt haben wir eine Verbindung von unserem System zu final.com. Die erste Hälfte dieser Verbindung ist eine SSH-Verbindung von unserem System zu bastion.com. Die zweite Hälfte dieser Verbindung ist ein Netcat-Tunnel von bastion.com zu final.com.
  5. Der ssh finalBefehl verwendet nun die obige Verbindung als Proxy und tunnelt ihre Daten über diese vorhandene Verbindung.

Außerdem möchte ich auch wissen, ob diese Technik auch als SSH-Stacking bezeichnet wird .

Zeilenumbrüche hinzugefügt

Naruto Uzumaki
quelle

Antworten:

8

3) Von bastion.com wird ein Netcat-Tunnel zu Port 22 von final.com erstellt.

false, es gibt keine Netcat.

1) Der Benutzer gibt ssh finallocalhost ein. Dadurch wird der übergeordnete SSH-Prozess gestartet.
2) Der übergeordnete
SSH erstellt einen untergeordneten SSH mit E / A, die an Pipes umgeleitet werden. 3) Der untergeordnete SSH erstellt eine Verbindung zu bastion.com.
4) Der sshdProzess auf bastion.com erstellt eine TCP-Verbindung zu final.com:22.
5) Ein ssh-Kanal wird zu der vorhandenen ssh-Verbindung zwischen localhost und bastion.com hinzugefügt.
6) Das übergeordnete ssh schreibt die Handshake-Daten in die Pipe, das untergeordnete ssh liest es aus der Pipe, sendet über den ssh-Kanal an sshd auf bastion.com; sshd liest es und schreibt es in den mit final.com verbundenen Socket. Ebenso werden die Daten von final.com an localhost übertragen

Becken
quelle
Danke für deine Antwort. Ist diese Technik auch als SSH-Stapeln bekannt oder hat sie keinen Namen?
Naruto Uzumaki
2
Könnten Sie bitte eine Referenz zitieren? ZB manuell. spec ..
qweruiop