Como obter um proxy ssh socks on demand?

4

Eu sei que ssh fornece um proxy SOCKS com -D . Gostaria de saber se é possível iniciar tal proxy sob demanda, no momento em que uma conexão é feita para uma porta especificada (usando os gostos de socat e nc sob o capô). Esta é uma máquina de usuário único, portanto, nenhuma autenticação de conexões locais é necessária.

Aqui está o que eu tentei:

  • Diga ao navegador da Web para usar um proxy SOCKS em localhost:portA .

  • Para cada conexão à porta "acionador" portA , socat chama o script nc-ssh-socks , que eventualmente é executado em nc localhost portB :

    socat TCP-LISTEN:portA,fork EXEC:"nc-ssh-socks server portB"
    
  • O script também garante que exista um processo ssh que fornece o proxy SOCKS em localhost:portB :

    cmd="ssh -fND $2 $1"
    pgrep -u $USER -fx "$cmd" || $cmd
    exec nc localhost $2
    

No entanto, o esquema não funciona, continuo recebendo erros de socat -ddddd do formulário:

W read(6, 0x1bf5360, 8192): Connection reset by peer
W waitpid(): child 25032 exited with status 1
E write(6, 0x1bf5360, 2): Broken pipe

Estranhamente, ocasionalmente vejo partes de uma página aparecendo no navegador, mas não sei se isso é devido ao armazenamento em cache ou porque algumas conexões funcionam, mas a maioria não o faz.

Alguém sabe o suficiente sobre socat , nc e ssh para entender por que isso não está funcionando?

    
por Matei David 15.10.2016 / 05:34

1 resposta

0

Durante a depuração, aumente sua visibilidade removendo -fN do comando ssh e adicione -vvv a para informações de depuração. Isso só lhe dará informações do lado do cliente, mas pode lhe dizer mais.

    
por 20.09.2017 / 19:39