A veces reinicio un dispositivo y necesito ssh
volver 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 :-)ssh
puede 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
ConnectionAttempts
configuración que hace casi lo que quieres. El valor predeterminado es 1, pero puede cambiarlo enssh_config
o 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 [...]
,.autossh
mantiene 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 conscreen
o equivalente.Recomiendo esto
Pero vea su página de manual para más detalles. Con los parámetros anteriores,
autossh
intentará iniciar ssh cadaAUTOSSH_POLL
segundo,AUTOSSH_GATETIME=0
lo intenta de nuevo si falla el primer intento (así que definitivamente lo que desea),-M 0
deshabilita la comprobación de conexión mediante autossh, todas las opciones posteriores se pasan a ssh. Las dos-o
opciones 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
ressh
y se puede usar tan simple comoressh {hostname}
o con cuidado,ressh -S {session_name} {hostname}
fuente