Estou executando ssh
no macOS para redirecionar conexões para o soquete de domínio local do Unix para um soquete de domínio em outra máquina. A linha de comando para ssh
chamada é aproximadamente a seguinte:
$ ssh -nNT -L /var/run/some.socket:/var/run/some.socket -o TCPKeepAlive=yes \
-o ServerAliveCountMax=10 -o ServerAliveInterval=60 user@destination
Depois de realizar alguns testes de carga, descobri que, ocasionalmente, algumas conexões de clientes falham e, ao examinar os logs, encontrei a seguinte saída de erro ssh
ao mesmo tempo em que as conexões falham:
channel 41: open failed: connect failed: open failed
channel 44: open failed: connect failed: open failed
channel 47: open failed: connect failed: open failed
channel 49: open failed: connect failed: open failed
channel 51: open failed: connect failed: open failed
channel 59: open failed: connect failed: open failed
channel 62: open failed: connect failed: open failed
channel 64: open failed: connect failed: open failed
Os parâmetros de teste de carga são para executar 100 conexões simultâneas (conectar, enviar alguns dados, receber alguns dados, desconectar com um total de 10.000 conexões a serem realizadas).
O comportamento observado é que no início do teste quando o primeiro conjunto de conexões é criado muito rapidamente, poucas conexões falham com os erros acima. Quantas falhas variam de execução para execução, mas geralmente entre algumas e uma dúzia ou mais. A maioria das falhas tende a acontecer no início do teste, embora às vezes ocorra mais tarde no teste (ou seja, depois que as primeiras 100 foram feitas).
Outros posts sobre SO com descrições semelhantes parecem estar cobrindo a questão de usar localhost
com solução alternativa para usar 127.0.0.1
, o que aqui o torna irrelevante, pois não é um soquete TCP/IP. Além disso, a destination
parte no comando acima já está especificada como um endereço IP.
Um pouco perdido sobre como corrigir e rastrear o problema. Eu tentei usar -vvv
para obter o despejo detalhado da ssh
operação sem nada frutífero (tudo o que registra para os canais relevantes é que o soquete foi definido como não bloqueante).
Observe que a chamada para ssh
é feita a partir de um script, e a chamada é precedida de ulimit -n 1024
que deve fornecer descritores de arquivo mais do que suficientes para estarem disponíveis para atender a todos os soquetes.
Essa mensagem de erro significa que o servidor SSH remoto não pôde executar uma solicitação de encaminhamento de TCP porque não pôde se conectar ao destino do túnel. A última parte "falha ao abrir" da mensagem é uma mensagem de erro do servidor SSH remoto.
Quando você executa o SSH com um encaminhamento de porta, o encaminhamento de porta funciona assim:
No seu caso, o servidor ssh está falhando na etapa 3 porque não pode se conectar ao destino do túnel por algum motivo.
Você deve verificar o log ssh no servidor remoto. O processo do servidor SSH pode ter registrado uma mensagem dizendo por que está falhando. Além disso, você diz que isso está acontecendo de forma intermitente durante um teste de carga, então eu analisaria os problemas do lado do servidor relacionados à carga. Algumas possibilidades vêm à mente: