De externe opdrachten van Fabric reizen over SSH. Om die SSH-verbinding via een SOCKS-server te leiden, geef Fabric een connector die SOCKS spreekt en de bytestroom van de bestemming teruggeeft.

De Connection-API die in Fabric 2 is geïntroduceerd, accepteert een opdrachtregel als zijn gateway. Fabric gebruikt die regel als ProxyCommand. Met een bestaande OpenBSD-compatibele nc die zijn proxy-opties ondersteunt, kan de configuratie er zo uitzien:

from fabric import Connection

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

Dit voorbeeld gebruikt de normale SSH-poort, 22. De -X 5 van de connector selecteert SOCKS5, terwijl -x het eindpunt van de proxy aangeeft. De plaatsaanduidingen voor host en poort leveren de SSH-bestemming. Voor een openbare SSH-bestemming kan een niet-geverifieerd eindpunt uit de SOCKS5-proxylijst het proxyadres invullen als het die bestemming en poort toestaat. Configureer de opdracht met de opties van de daadwerkelijke connector die op de machine is geïnstalleerd; programma's met de naam nc bieden niet allemaal dezelfde interface.

De connector draait lokaal, waar Fabric draait. De applicatieserver heeft die hulp niet nodig alleen omdat hij de SSH-bestemming is. Zodra de stroom tot stand is gebracht, voert Fabric nog steeds SSH-onderhandeling uit en authenticeert het deploy-account op app.example.net. Elke authenticatie die de SOCKS-server vereist, hoort bij de connector en moet daardoor worden ondersteund.

Fabric kan ook een ProxyCommand uit de SSH-configuratie lezen. Dat kan handig zijn wanneer dezelfde route door meerdere SSH-hulpmiddelen wordt gebruikt. Gebruik één bedoelde gateway-definitie voor de verbinding, in plaats van een gateway in opdrachtstijl te combineren met een afzonderlijke jump-host-gateway voor dezelfde bestemming.

Wanneer de tussenpersoon een SSH-server is

Een Connection-object van Fabric dat als gateway wordt opgegeven, betekent iets anders: Fabric maakt verbinding met die SSH-gateway en vraagt om een kanaal naar de uiteindelijke host. Gebruik die vorm voor een SSH-jump-host. Een SOCKS-listener is geen SSH-server, dus die heeft de connector in opdrachtstijl hierboven nodig.

Deze transportkeuze heeft ook een duidelijke grens. Hij routeert Fabrics SSH-verbinding. Een opdracht die op de externe host wordt uitgevoerd en later een repository of pakket downloadt, maakt een nieuwe uitgaande verbinding vanaf die host, volgens de eigen proxyconfiguratie van dat programma.

Gerelateerde artikelen