A veces reinicio un dispositivo y necesito sshvolver a conectarlo cuando esté listo.
Quiero ejecutar el comando ssh cada 5 segundos hasta que el comando tenga éxito.
Mi primer intento
watch -n5 ssh [email protected] && exit 1
¿Cómo puedo hacer esto?

Respuestas:
Otra opción sería usar
until.Si hace esto repetidamente para varios hosts, póngalo en una función en su
~/.bashrc.fuente
$lugar del indicador :-)sshpuede salir con un estado distinto de cero después de haberse conectado con éxito si algo externo a la conexión termina la sesión, en cuyo caso ese script intentará volver a conectarse. Esto puede o no ser un efecto secundario deseable.El
!!para repetir el último comando.fuente
OpenSSH tiene una
ConnectionAttemptsconfiguración que hace casi lo que quieres. El valor predeterminado es 1, pero puede cambiarlo enssh_configo en la línea de comandos:Desafortunadamente, no puede ajustar el intervalo de intento que se fija en 1 segundo, pero puede ajustar el tiempo de espera del intento de conexión
ConnectTimeout(en segundos) de la misma manera.fuente
fuente
while ! nc -w5 -z host.example.com 22; do [...],.autosshmantiene vivas las sesiones ssh. Con los parámetros correctos, también puede iniciarlo cuando actualmente es imposible conectarse y lo intentará hasta que tenga éxito. Esto funciona bien, pero si quieres la re parte conectarse con el trabajo muy bien con sesiones interactivas que necesitará para combinarlo conscreeno equivalente.Recomiendo esto
Pero vea su página de manual para más detalles. Con los parámetros anteriores,
autosshintentará iniciar ssh cadaAUTOSSH_POLLsegundo,AUTOSSH_GATETIME=0lo intenta de nuevo si falla el primer intento (así que definitivamente lo que desea),-M 0deshabilita la comprobación de conexión mediante autossh, todas las opciones posteriores se pasan a ssh. Las dos-oopciones hacen que ssh salga si las conexiones caen durante más de 5 segundos.fuente
A riesgo de arrojar código a una respuesta, este script funciona para mí diariamente. Lo llamo
resshy se puede usar tan simple comoressh {hostname}o con cuidado,ressh -S {session_name} {hostname}fuente