Os comandos remotos do Fabric viajam por SSH. Para levar essa ligação SSH através de um servidor SOCKS, dê ao Fabric um conector que fale SOCKS e devolva o fluxo de bytes do destino.

A API Connection introduzida no Fabric 2 aceita uma cadeia de comando como o seu gateway. O Fabric usa essa cadeia como ProxyCommand. Com um nc compatível com OpenBSD que suporte as suas opções de proxy, a configuração pode ser:

from fabric import Connection

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

Este exemplo usa a porta SSH normal, 22. O -X 5 do conector seleciona SOCKS5, enquanto -x identifica o ponto final do proxy. Os marcadores de anfitrião e porta fornecem o destino SSH. Para um destino SSH público, um ponto final não autenticado da lista de proxies SOCKS5 pode preencher o endereço do proxy se permitir esse destino e essa porta. Configure o comando com as opções do conector realmente instalado na máquina; os programas chamados nc não expõem todos a mesma interface.

O conector é executado localmente, onde o Fabric é executado. O servidor da aplicação não precisa desse auxiliar só porque é o destino SSH. Uma vez estabelecido o fluxo, o Fabric continua a fazer a negociação SSH e autentica a conta deploy em app.example.net. Qualquer autenticação exigida pelo servidor SOCKS pertence ao conector e tem de ser suportada por ele.

O Fabric também pode ler um ProxyCommand da configuração SSH. Isso pode ser prático quando a mesma rota é usada por várias ferramentas SSH. Use uma única definição de gateway prevista para a ligação, em vez de combinar um gateway em estilo de comando com um gateway de anfitrião de salto separado para o mesmo destino.

Quando o intermediário é um servidor SSH

Um objeto Connection do Fabric fornecido como gateway significa outra coisa: o Fabric liga-se a esse gateway SSH e pede um canal para o anfitrião final. Use essa forma para um anfitrião de salto SSH. Um ouvinte SOCKS não é um servidor SSH, por isso precisa do conector em estilo de comando acima.

Esta escolha de transporte também tem um limite claro. Encaminha a ligação SSH do Fabric. Um comando executado no anfitrião remoto que mais tarde descarregue um repositório ou pacote cria uma nova ligação de saída a partir desse anfitrião, segundo a configuração de proxy própria desse programa.

Artigos relacionados