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.
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?
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.
Tags ssh netcat socat socks-proxy