Por que o SSH dynamicforward resulta em algum tipo de loop que leva a um erro de “muitos arquivos abertos”?

2

Eu gostaria de entender por que meu cliente SSH me apresenta este erro:

channel 1017: open failed: connect failed: open failed
channel 1017: open failed: connect failed: Too many open files
channel 1017: open failed: connect failed: Too many open files
channel 1017: open failed: connect failed: Too many open files

Antecedentes:

Eu tenho meu webbrowser configurado para usar localhost: 6162 como proxy de socks e usar o SSH para fornecer esse proxy usando ssh -d6162 hostname .

Normalmente, isso é conectado a um servidor remoto e, nesse caso, funciona conforme o esperado. Mas alguns sites exigem que eu conecte meu próprio país, o que meu servidor não é.

Como não é fácil reconfigurar o Proxy do navegador toda vez que eu precisar desse site, eu desconecto o cliente ssh e inicio um novo com ssh -d6162 127.0.0.1

Em teoria, isso deve substituir apenas o proxy que o navegador vê com um terminal diferente, e eu esperaria que ele se comportasse da mesma maneira.

No entanto, este não é o caso e, em vez disso, o cliente ssh começa a gerar um erro "muitos arquivos abertos" e a conexão é interrompida após alguns segundos.

Se eu iniciar o ssh com -vvv , posso ver que, assim que eu iniciá-lo, o cliente (ssh?) gera conexões até que o max-open-files seja alcançado:

debug1: channel 993: free: direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38054 to 127.0.0.1 port 34636, nchannels 24
debug3: channel 993: status: The following connections are open:
  #993 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38054 to 127.0.0.1 port 34636 (t4 r989 i0/0 o3/0 fd 999/999 cc -1)
  #994 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636 (t4 r990 i0/0 o3/0 fd 1000/1000 cc -1)
  #995 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38058 to 127.0.0.1 port 34636 (t4 r991 i0/0 o3/0 fd 1001/1001 cc -1)
  #996 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38060 to 127.0.0.1 port 34636 (t4 r992 i0/0 o3/0 fd 1002/1002 cc -1)
  #997 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38062 to 127.0.0.1 port 34636 (t4 r993 i0/0 o3/0 fd 1003/1003 cc -1)
  #998 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38064 to 127.0.0.1 port 34636 (
debug1: channel 994: free: direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636, nchannels 23
debug3: channel 994: status: The following connections are open:
  #994 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38056 to 127.0.0.1 port 34636 (t4 r990 i0/0 o3/0 fd 1000/1000 cc -1)
  #995 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38058 to 127.0.0.1 port 34636 (t4 r991 i0/0 o3/0 fd 1001/1001 cc -1)
  #996 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38060 to 127.0.0.1 port 34636 (t4 r992 i0/0 o3/0 fd 1002/1002 cc -1)
  #997 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38062 to 127.0.0.1 port 34636 (t4 r993 i0/0 o3/0 fd 1003/1003 cc -1)
  #998 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38064 to 127.0.0.1 port 34636 (t4 r994 i0/0 o3/0 fd 1004/1004 cc -1)
  #999 direct-tcpip: listening port 34636 for 127.0.0.1 port 34636, connect from 127.0.0.1 port 38066 to 127.0.0.1 port 34636

Isso continua até que o ulimit dos arquivos seja atingido.
Eu acho que estou involuntariamente criando algum tipo de loop para que cada conexão que o navegador esteja criando esteja criando outra conexão, que está criando outra conexão que está criando outra conexão, etc.

Mais uma vez, isso só acontece com um dynamicforward para localhost , na minha conexão de caso de uso normal a um servidor remoto ele funciona perfeitamente.

cliente e servidor ssh:
OpenSSH_7.5p1 Debian-10, OpenSSL 1.0.2l 25 May 2017

navegador: Google Chrome 61.0.3163.91

configuração do navegador:

google-chrome --proxy-server="socks5://localhost:6162" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost, EXCLUDE 192.168.178.0/24" --proxy-bypass-list="127.0.0.1:3000,127.0.0.1,localhost:3000,localhost,192.168.178.0/24"

Alguém pode reproduzir isso? Alguma explicação?

P.S. Como normalmente, enquanto escrevo isso, ocorreu-me que o navegador pode tentar alcançar o proxy no localhost através do próprio proxy, mas isso não faz sentido, não é?

    
por mavu 06.10.2017 / 08:47

0 respostas

Tags