Comecei minha autossh witt com um tempo de pesquisa de 30 s:
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
E está funcionando bem:
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
Mas se eu remover fisicamente o cabo de rede, o que significa que o túnel não pode mais funcionar, o autossh não mata o daemon ssh. Por quê? Entendo que o autossh não pode fazer nada se o link estiver inativo, mas, na minha opinião, ele deve tentar fazer o seguinte:
- Verifique o processo ssh filho (
check on child ...) - Verifique o ponto final !!! (uma operação semelhante a ping através do túnel)
- Perceba que o túnel está inoperante
- Pare o processo ssh
- Tente criar o túnel novamente
- Perceba que não funciona e configure um cronômetro (aumentando exponencialmente?) Para verificar novamente em breve
É por isso que estou executando o autossh: se algo acontecer com o túnel (seja um problema de software ou hardware), ele deverá tentar reiniciá-lo. Em vez disso, está apenas esperando o processo ssh morrer. Não deveria estar tentando reiniciá-lo, mesmo que não haja esperança de restabelecer a conexão?
Que tipo de verificação está fazendo autossh? Apenas verifique se o ssh está funcionando? Não está fazendo nenhum tipo de verificação remota?
Editar
Conforme solicitado, adiciono a parte relevante da configuração do ssh:
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
dev tunem ambos e definindo remotena configuração do cliente. O único bit irritante é gerenciar os certificados. Usamos a CA 'easy-rsa' que acompanha o OpenVPN. Depois de ter os certificados, o resto é fácil.