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 é?