proxy http sobre ssh, não meias

30

A pergunta é simples, mas a resposta não é:

ssh -D 8080 user@host

ou

ssh -gCNf -D 8080 user@host

ou

wathever with -D #

Eu preciso de um tipo de proxy que eu possa usar com a variável http_proxy, em um dispositivo incorporado que não suporte SOCKS.

O que devo fazer?

behrooz
fonte
Não deveria ser ssh -D user@host:8080?
ngen
eu fiz isso com o ssh há um tempo atrás .. vnc através do ssh. mas você poderia supor usar o squid (um proxy http) através do ssh. Não me lembro como eu fiz isso no momento. não é -D 'porque (como você sabe - e melhor que eu) -D é SOCKS, se bem me lembro.
barlop
@ngen: No. -Despecifica uma porta para abrir o túnel, não a porta à qual se conectar. (Mesmo a ligação de porta é especificado como -p port, não :port, por motivos de compatibilidade.)
grawity

Respostas:

33

Método 1: Use um proxy HTTP que suporte o uso de SOCKS upstream, por exemplo, Polipo ou Privoxy.

Primeiro, estabeleça um -Dtúnel sobre SSH como sempre, depois configure o proxy HTTP para usar o túnel SSH - por exemplo, configuração Polipo:

proxyAddress = "::1"
proxyPort = 8118
socksParentProxy = "localhost:8080"
socksProxyType = socks5

Por fim, aponte o aplicativo para Polipo usando http_proxy=localhost:8118.

Método 2: Execute seu programa dentro do torsockswrapper (ou mais antigo tsocks), que proxies todas as conexões de forma transparente. Ele foi projetado para uso com o Tor, mas funciona com qualquer servidor SOCKS, inclusive ssh -D.

Método 3: Configure um proxy HTTP no seu servidor e use-o ssh -Lpara acessá-lo.

gravidade
fonte
Privoxy é a melhor solução. Muito obrigado.
Seyed Morteza
18

Todos os -Dresultados em um servidor SOCKS. Se o seu cliente não pode lidar com SOCKS esqueça -D.

Você deve executar um proxy HTTP no host remoto e encaminhar com -L:

ssh -f -N -n -L8080:127.0.0.1:8080 host
ceving
fonte
2
Para a execução de um proxy, achei o "tinyproxy" super simples e já configurado razoavelmente por padrão. No host remoto Ubuntu / etc, basta "sudo apt-get install tinyproxy" e encaminhe para a porta 8888 como acima: "ssh -L8888: 127.0.0.1: 8888"
Jimbly 2/17/17
7

Eu tenho o mesmo problema que deseja usar o proxy HTTP através do SSH. Como muitos aplicativos suportam apenas o proxy HTTP, o proxy HTTP é fácil de ser usado no ambiente da linha de comandos.

Embora tenha pesquisado várias páginas, mas não consigo encontrar uma maneira direta (pode ser encadeada com Polipo, Privoxy ou tsocks) para fazer isso ...

Após alguns dias de trabalho, terminei uma versão simples do Golang do proxy HTTP sobre SSH. Sinta-se livre para brincar: mallory .

Atualmente, suporta apenas chave RSA (localizada em $ HOME / .ssh / id_rsa) e autorização de senha.

hosté o endereço do servidor SSH, porté 22se não for alterado por seu administrador. O lado do servidor é apenas nosso velho amigo, sshdcom configuração zero.

mallory -engine=ssh -remote=ssh://host:port

ou com nome de usuário user

mallory -engine=ssh -remote=ssh://user@host:port

ou com nome de usuário usere senha1234

mallory -engine=ssh -remote=ssh://user:1234@host:port

Depois de conectado, um proxy HTTP servirá no localhost: 1315.

justmao945
fonte
4
ssh -L 8080:localhost:12345 user@host

Isso abrirá a porta 8080 na máquina local e encaminhará todos os dados para a porta 12345 no host local, como visto na máquina remota.

lesmana
fonte
2
Não se esqueça, você também precisa ter um proxy HTTP em execução no host remoto. O encaminhamento de porta por si só não ajudará.
Jonathan
2

Execute o Privoxy no host remoto e conecte-se via SSH ao Privoxy usando a -Lopção:

-L [bind_address:] port: host: hostport
         Especifica que a porta especificada no host local (cliente) deve ser
         encaminhado para o host e porta fornecidos no lado remoto. este
         funciona alocando um soquete para ouvir a porta no lado local,
         opcionalmente ligado ao bind_address especificado. Sempre que um
         Quando a conexão é feita a essa porta, a conexão é encaminhada
         o canal seguro e uma conexão é feita para hospedar a porta
         hostport da máquina remota.

( fonte da página de manual )

anônimo
fonte
1

Você também pode usar saca-rolhas (GPL)

Adicione o seguinte ao seu .ssh/config

Host=RemoteServerIP or Name
User=UserLoginName
Port=PortNumber
ProxCommand=/usr/bin/corkscrew Proxy.Adress PortNumber %h %p
aurelien
fonte
o saca-rolhas executa o ssh em um proxy http, não o inverso solicitado.
Embee