Fabrics entfernte Befehle laufen über SSH. Um diese SSH-Verbindung durch einen SOCKS-Server zu führen, geben Sie Fabric einen Connector, der SOCKS spricht und den Bytestrom des Ziels zurückliefert.

Die mit Fabric 2 eingeführte Connection-API nimmt einen Befehlsstring als gateway entgegen. Fabric verwendet diesen String als ProxyCommand. Mit einem vorhandenen OpenBSD-kompatiblen nc, das seine Proxy-Optionen unterstützt, kann die Konfiguration so aussehen:

from fabric import Connection

connection = Connection(
    "app.example.net",
    user="deploy",
    gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)

Dieses Beispiel verwendet den normalen SSH-Port 22. Das -X 5 des Connectors wählt SOCKS5, während -x den Proxy-Endpunkt bezeichnet. Die Platzhalter für Host und Port liefern das SSH-Ziel. Für ein öffentliches SSH-Ziel kann ein nicht authentifizierter Endpunkt aus der SOCKS5-Proxy-Liste die Proxy-Adresse füllen, wenn er dieses Ziel und diesen Port zulässt. Konfigurieren Sie den Befehl mit den Optionen des tatsächlich auf dem Rechner installierten Connectors; Programme namens nc bieten nicht alle dieselbe Schnittstelle.

Der Connector läuft lokal, wo Fabric läuft. Der Anwendungsserver braucht diesen Helfer nicht, nur weil er das SSH-Ziel ist. Sobald der Strom aufgebaut ist, führt Fabric weiterhin die SSH-Aushandlung durch und authentifiziert das deploy-Konto auf app.example.net. Jede vom SOCKS-Server geforderte Authentifizierung gehört zum Connector und muss von ihm unterstützt werden.

Fabric kann auch ein ProxyCommand aus der SSH-Konfiguration lesen. Das kann praktisch sein, wenn dieselbe Route von mehreren SSH-Werkzeugen genutzt wird. Verwenden Sie eine einzige vorgesehene Gateway-Definition für die Verbindung, statt ein Gateway im Befehlsstil mit einem separaten Jump-Host-Gateway für dasselbe Ziel zu kombinieren.

Wenn der Vermittler ein SSH-Server ist

Ein Connection-Objekt von Fabric, das als gateway übergeben wird, bedeutet etwas anderes: Fabric verbindet sich mit diesem SSH-Gateway und fordert einen Kanal zum endgültigen Host an. Verwenden Sie diese Form für einen SSH-Jump-Host. Ein SOCKS-Listener ist kein SSH-Server und braucht daher den obigen Connector im Befehlsstil.

Diese Transportwahl hat auch eine klare Grenze. Sie leitet Fabrics SSH-Verbindung. Ein auf dem entfernten Host ausgeführter Befehl, der später ein Repository oder Paket herunterlädt, baut eine neue ausgehende Verbindung von diesem Host auf, gemäß der eigenen Proxy-Konfiguration dieses Programms.

Ähnliche Artikel