Ligações SSH do Fabric 2+ através de um proxy SOCKS
Use o gateway ProxyCommand do Fabric com um conector compatível com SOCKS, mantendo a autenticação SSH ligada ao destino.
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.