Como posso usar o SSH com um proxy SOCKS 5?

35

Eu tenho um proxy SOCKS5 configurado através do PuTTY com a porta 7777 configurada como uma porta dinâmica. Eu posso usar o firefox / filezilla / etc, configurando-os para usar um proxy SOCKS com localhoste porta 7777. Mas não consigo descobrir como ssh (através do Cygwin) para um servidor remoto usando a porta dinâmica. Isso é possível?

Eu tentei usar ProxyCommandatravés do seguinte método.

  1. Crie ~/.ssh/configcom a seguinte linha:

    ProxyCommand /usr/bin/nc -X connect -x 127.0.0.1:7777 %h %p
    
  2. Execute ssh -p22 user @ remotehost

A mensagem que recebo é ssh_exchange_identification: Connection closed by remote host

Lêmure enferrujado
fonte
11
Para fazer um programa que não suporta SOCKS passar por SOCKS, você pode usar o chamado proxifer; consulte en.wikipedia.org/wiki/Comparison_of_proxifiers . Em particular, recomendo meu proxifer de código aberto tun2socks ( code.google.com/p/badvpn/wiki/tun2socks ).
Ambroz Bizjak
Obrigado pelo comentário Ambroz. Eu preciso que ele funcione no cygwin, e vejo na página da wikipedia sobre proxifiers que todos os que ele menciona não estão implementados no cygwin ou não são aplicáveis. Existe uma maneira de obter um proxifier para trabalhar no cygwin?
você não precisa dele para dar suporte específico ao Cygwin. Os programas Cygwin são, no final, apenas programas do Windows, mas com uma interface POSIX implementada como uma biblioteca. Se um proxifier funcionar no Windows, ele deverá poder executar o proxy dos programas Cygwin.
26512 Ambroz Bizjak

Respostas:

31

Você está usando 'connect' para HTTPS como sua versão de proxy, isto é do man nc:

-X proxy_version Solicita que a nc use o protocolo especificado ao conversar com o servidor proxy. Os protocolos suportados são '' 4 '' (SOCKS v.4), '' 5 '' (SOCKS v.5) e 'connect' (proxy HTTPS). Se o protocolo não for especificado, o SOCKS versão 5 será usado.

Portanto, você deve usar o seguinte para usar o SOCKS 5:

ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:7777 %h %p

Ou simplesmente:

ProxyCommand /usr/bin/nc -x 127.0.0.1:7777 %h %p

Espero que ajude.


fonte
Obrigado Saman, isso funcionou! Além disso, obrigado pela explicação, isso ajuda.
O ProxyCommanddeve ser a primeira linha de sua ~/.ssh/config', or else nested inside a specify seção host`. Não tenho muita certeza do porquê. Não funciona se for a última linha do ~/.ssh/config
arquivo
@AaronMcDaid: From man ssh_config: "Para cada parâmetro, o primeiro valor obtido será usado." Portanto ... as configurações globais precisam estar antes de qualquer Hostseção. A última linha de ~/.ssh/configfaz parte da Hostseção final .
mpb
Vale ressaltar que o netcat está presente no /bin/ncDebian e no Ubuntu.
Per Lundberg
11
ssh -o ProxyCommand='nc --proxy-type socks4 --proxy 127.0.0.1:9050 %h %p' user@host

fc19 x86_64, Ncat: Versão 6.25

user264910
fonte
apenas curioso - por quê proxy-type socks4?
Suspeito # 19/13
2
Você pode adicionar um pouco mais de explicação para dizer por que é a solução.
ChrisF
11
@ChrisF é o mesmo que solução aceita, mas é uma linha! Não há necessidade de modificar nenhum arquivo de configuração.
J123b567
11
Este é o programa nmap ncat (fornecido apt install nmapem sistemas APT como Ubuntu e Debian), que é diferente do netcat (seja netcat-openbsd ou o netcat-tradicional do Hobbit).
Adam Katz
11
@ Suspeito relacionado ao comentário de @ Katam Katz, proxy-typeé socks4porque o ncatprograma nmap não suportava sock5 até mais recentemente. De fato, esse é um problema até agora (novembro de 2017), pois o RHEL 7 / Centos 7 mudou para o pacote nmap, mas usou uma compilação mais antiga que não suporta meias5.
Randall
3

O tsocks ( http://tsocks.sourceforge.net/ ) é um bom wrapper que usa LD_PRELOAD para fazer qualquer programa usar o proxy SOCKS de forma transparente:

tsocks ssh example.com

Apenas funciona, lembre-se de configurar o IP do proxy SOCKS no /etc/tsocks.conf

neutrino
fonte
é complexa demais para ter um arquivo de configuração
Jiang YD
1

Este comando a seguir servirá apenas para usar nc:

ssh examplehost.com -o "ProxyCommand=nc --proxy localhost:7000 %h %p"

O padrão é proxy HTTP, há um proxy HTTP em execução na porta 7000.

Chinglin Wen
fonte