shell - copiar - ¿Cómo hacer ssh con un tiempo de espera en un script?
comando scp linux password (5)
Bueno, podrías usar nohup para ejecutar lo que sea que estés ejecutando en el "modo sin bloqueo". Así que puedes seguir comprobando si lo que se suponía debía ejecutar, ejecutar o, de lo contrario, salir.
nohup ./my-script-that-may-take-long-to-finish.sh & ./check-if-previous-script-ran-or-exit.sh
echo "Script ended on Feb 15, 2011, 9:20AM" > /tmp/done.txt
Entonces, en el segundo, simplemente verifica si el archivo existe.
Estoy ejecutando un script que se conecta a través de SSH sin contraseña en un host remoto. Quiero establecer un tiempo de espera, por lo que si el host remoto tarda un tiempo infinito en ejecutarse, quiero salir de esa sesión ssh y continuar otras líneas en mi script sh.
¿Alguna idea sobre cómo hacerlo?
También puedes conectar con la bandera
-o ServerAliveInterval=<secs> por lo que el cliente SSH enviará un paquete nulo al servidor cada <secs>
segundos, solo para mantener la conexión activa. En Linux esto también podría establecerse globalmente en /etc/ssh/ssh_config
o por usuario en ~/.ssh/config
.
Use -o ConnectTimeout
y -o BatchMode=yes -o StrictHostKeyChecking=no
.
ConnectTimeout evita que la secuencia de comandos se cuelgue, BatchMode evita que se cuelgue con Host desconocido, YES para agregar a known_hosts y StrictHostKeyChecking agrega la huella digital automáticamente.
**** NOTA **** El "StrictHostKeyChecking" solo se diseñó para redes internas en las que confía en sus hosts. Dependiendo de la versión del cliente SSH, el mensaje "¿Está seguro de que desea agregar su huella digital?" Puede hacer que el cliente cuelgue indefinidamente (principalmente versiones anteriores que se ejecutan en AIX). La mayoría de las versiones modernas no sufren este problema. Si tiene que lidiar con huellas dactilares con varios hosts, le recomiendo que mantenga el archivo known_hosts con algún tipo de herramienta de administración de configuración como puppet / ansible / chef / salt / etc.
prueba esto:
timeout 5 ssh user@ip
timeout ejecuta el comando ssh (con args) y envía un SIGTERM si ssh no regresa después de 5 segundos. para obtener más detalles sobre el tiempo de espera, lea este documento: http://man7.org/linux/man-pages/man1/timeout.1.html
o puede usar el parámetro de ssh:
ssh -o ConnectTimeout=3 user@ip
ssh -o ConnectTimeout=10 <hostName>
Donde 10 es tiempo en segundos.