Connexions SSH de Fabric 2+ via un proxy SOCKS
Utilisez la passerelle ProxyCommand de Fabric avec un connecteur compatible SOCKS tout en gardant l'authentification SSH attachée à la destination.
Les commandes distantes de Fabric circulent via SSH. Pour faire passer cette connexion SSH par un serveur SOCKS, donnez à Fabric un connecteur qui parle SOCKS et renvoie le flux d'octets de la destination.
L'API Connection introduite dans Fabric 2 accepte une chaîne de commande comme gateway. Fabric utilise cette chaîne comme ProxyCommand. Avec un nc compatible OpenBSD qui prend en charge ses options de proxy, la configuration peut être :
from fabric import Connection
connection = Connection(
"app.example.net",
user="deploy",
gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)Cet exemple utilise le port SSH habituel, 22. Le -X 5 du connecteur sélectionne SOCKS5, tandis que -x désigne le point de terminaison du proxy. Les espaces réservés pour l'hôte et le port fournissent la destination SSH. Pour une destination SSH publique, un point de terminaison non authentifié de la liste de proxys SOCKS5 peut remplir l'adresse du proxy s'il autorise cette destination et ce port. Configurez la commande avec les options du connecteur réellement installé sur la machine ; les programmes nommés nc n'exposent pas tous la même interface.
Le connecteur s'exécute localement, là où Fabric s'exécute. Le serveur d'application n'a pas besoin de cet auxiliaire simplement parce qu'il est la destination SSH. Une fois le flux établi, Fabric effectue toujours la négociation SSH et authentifie le compte deploy sur app.example.net. Toute authentification exigée par le serveur SOCKS relève du connecteur et doit être prise en charge par celui-ci.
Fabric peut aussi lire un ProxyCommand depuis la configuration SSH. Cela peut être pratique lorsque le même itinéraire est utilisé par plusieurs outils SSH. Utilisez une seule définition de passerelle prévue pour la connexion, plutôt que de combiner une passerelle de style commande avec une passerelle d'hôte de saut distincte pour la même destination.
Lorsque l'intermédiaire est un serveur SSH
Un objet Connection de Fabric fourni comme gateway signifie autre chose : Fabric se connecte à cette passerelle SSH et demande un canal vers l'hôte final. Utilisez cette forme pour un hôte de saut SSH. Un écouteur SOCKS n'est pas un serveur SSH, il a donc besoin du connecteur de style commande ci-dessus.
Ce choix de transport a aussi une limite claire. Il achemine la connexion SSH de Fabric. Une commande exécutée sur l'hôte distant qui télécharge ensuite un dépôt ou un paquet établit une nouvelle connexion sortante depuis cet hôte, selon la configuration de proxy propre à ce programme.