O túnel da porta SSH é desconectado com “select: Invalid argument”

3

Estou tunelando para um servidor remoto para acessar uma API privada. Eu estou usando o seguinte comando (digitando-o no Terminal) para encaminhar uma única porta: ssh -L $local_port:$host:$port -v . Tentei muitos portos locais diferentes (9000, 9001 etc).

Eu posso usar a API diretamente do navegador ou usar proxy por nginx por horas sem problema. Se acessá-lo a partir de um aplicativo de quadro de jogos, a sessão do ssh imprime "select: Invalid argument" e fecha a conexão.

Aqui está o que o log parece quando acontece:

debug1: channel 1016: free: direct-tcpip: listening port 9001 for ec2-xxx.compute-1.amazonaws.com port 9000, connect from 127.0.0.1 port 65349, nchannels 1
select: Invalid argument
Connection to ec2-xxx.compute-1.amazonaws.com closed.
Transferred: sent 243904, received 64728 bytes, in 87.8 seconds
Bytes per second: sent 2778.0, received 737.2
debug1: Exit status -1

O aplicativo de reprodução está usando o AsyncHttpClient para fazer solicitações GET localhost: $ local_port.

Existe uma correção para isso no lado da conexão? por exemplo. fazer o ssh ignorar o erro e continuar conectado?

    
por Johnny Everson 16.01.2014 / 18:00

2 respostas

3

Eu só notei que sua saída de depuração diz o canal 1016. Eu suspeito que você esteja ficando sem filodescriptors. Acabei de verificar no meu laptop linux, e ulimit -a me mostra um máximo de 1024. Então, eu imagino que você está acertando isso também. A solução ideal é descobrir como você está usando tantos editores de texto simultâneos e reduzir isso de alguma forma.

A alternativa, a seguir, é simplesmente aumentar o número máximo de descritores de arquivos abertos:

 (useful debug commands here)
 lsof -p <pid>    should show you the open filedescriptors in use by a process, btw.
 ulimit -a     should show you your soft limits in this specific shell
 ulimit -aH    should show you the hard limits in this specific shell
 cat /proc/<pid>/limits     should show you the limits in effect on a specific process.

Para subir os limites de fd, você precisará editar o /etc/security/limits.conf nas duas máquinas para incluir as seguintes linhas:

*       hard    nofile    4096
*       soft    nofile    4096
root    hard    nofile    4096
root    soft    nofile    4096

Esses limites recém-reconfigurados só terão efeito quando você fizer login novamente. Eu frequentemente ssh para localhost para testar esse tipo de coisa, mas se eu fosse você, eu faria uma reinicialização se possível.

Se você não puder reinicializar sua máquina remota, pelo menos eu reiniciei o sshd. Antes de você usar o comando ssh novamente, use ulimit -a para confirmar se o máximo de arquivos abertos ou descritores de arquivos é 4096.

Quando você executa ssh na máquina remota, execute ulimit -n para verificar se ele diz 4096.

Boa sorte.

    
por 20.01.2014 / 19:00
0

As respostas anteriores são mais prováveis de serem corretas, mas se aumentar o número de filehandles não ajudar, você pode querer verificar seus arquivos de login (.bashrc, .bash_profile, .login, / etc / login etc) para uso indevido da função bash incorporada "select" - veja man bash para mais informações.

    
por 23.01.2014 / 01:36

Tags