Às vezes, reinicio um dispositivo e preciso ssh
voltar quando estiver pronto.
Eu quero executar o comando ssh a cada 5 segundos até que o comando seja bem-sucedido.
Minha primeira tentativa:
watch -n5 ssh [email protected] && exit 1
Como posso fazer isso?
Respostas:
Outra opção seria usar
until
.Se você fizer isso repetidamente para vários hosts, coloque-o em uma função no seu
~/.bashrc
.fonte
$
em vez do prompt de :-)ssh
pode sair com um status diferente de zero após a conexão bem-sucedida se algo externo à conexão terminar a sessão. Nesse caso, o script tentará se reconectar. Isso pode ou não ser um efeito colateral desejável.O
!!
para repetir o último comando.fonte
O OpenSSH tem uma
ConnectionAttempts
configuração que faz quase o que você deseja. O padrão é 1, mas você pode alterá-lo nassh_config
linha de comando:Infelizmente, você não pode ajustar o intervalo de tentativa fixado em 1 segundo, mas pode ajustar o tempo limite da tentativa de conexão
ConnectTimeout
(em segundos) da mesma maneira.fonte
fonte
while ! nc -w5 -z host.example.com 22; do [...]
,.autossh
mantém sessões ssh vivas. Com os parâmetros corretos, você também pode iniciá-lo quando atualmente não for possível conectar-se e tentará até conseguir. Esta multa funciona, mas se você quiser o re parte de conexão para trabalho bem com sessões interativas que você precisa para combiná-lo comscreen
ou equivalente.Eu recomendo isso:
Mas veja sua página de manual para detalhes. Com os parâmetros acima,
autossh
tentará iniciar o ssh a cadaAUTOSSH_POLL
segundo , faráAUTOSSH_GATETIME=0
com que tente novamente se a primeira tentativa falhar (definitivamente o que você deseja),-M 0
desativa a verificação de conexão por autossh, todas as opções posteriores são passadas para o ssh. As duas-o
opções fazem com que o ssh saia se as conexões caírem por mais de 5s.fonte
Correndo o risco de apenas jogar código em uma resposta, esse script funciona para mim diariamente. Eu chamo
ressh
e pode ser usado da maneira mais simplesressh {hostname}
, ou com cuidado,ressh -S {session_name} {hostname}
fonte