O processo SSH permanece ativo mesmo se a conexão falhar?

0

Ao tentar estabelecer um túnel ssh, notei que, mesmo se a conexão falhar, o processo permanece ativo. Por exemplo, se eu tentar executar este comando enquanto hostname estiver inativo:

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname

Ocasionalmente recebo a resposta:

Warning: remote port forwarding failed for listen port 3000

Eu só recebo essa mensagem de erro quando o processo original (em execução na máquina local) morre, mas o servidor remoto ainda não percebe. O processo tenta reiniciar, mas o servidor acha que ainda tem uma conexão em 3000 e não vai além de uma nova conexão, resultando no aviso acima.

Mas se eu fizer um pgrep -x ssh , posso ver que o processo ainda está ativo. Eu gostaria de executar este comando ssh como parte de um script bash em um cronjob que primeiro verifica para ver se o túnel é estabelecido e se não for restabelecido, mas a maneira que eu tenho o script de configuração a) vê que o túnel é para baixo e tenta criar um novo (que secretamente falha), ou b) vê que o processo falho está vivo e não faz nada. O resultado é que o túnel nunca é restabelecido, desde que esse processo falhe ainda exista.

Existe uma maneira de simplesmente matar o processo se a conexão falhar em vez de receber um aviso?

    
por Clyde 18.04.2017 / 19:10

2 respostas

1

Para qualquer outra pessoa que possa encontrar a resposta, encontrei a opção que queria em esta resposta : adicionar -o ExitOnForwardFailure=True ao comando força o ssh a sair se o encaminhamento de porta falhar, em vez de criar um processo zumbi:

/usr/bin/ssh -f -i /home/user/.ssh/id_rsa -N -R 3000:localhost:22 user@hostname -o ExitOnForwardFailure=True
    
por 20.04.2017 / 19:49
0

dê uma chance ao ClientAliveInterval.

man sshd_config

     ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has been received from the client, sshd(8) will send a message through
         the encrypted channel to request a response from the client.  The default is 0, indicating that these messages will not be sent
         to the client.
    
por 18.04.2017 / 20:45

Tags