04 octubre 2011

Cómo utilizar ssh en un bucle en un script



Alguna vez nos puede suceder que queramos incluír el comando ssh en un bucle para ejecutar una tarea en una serie de máquinas.

Para ello podemos utilizar "while read...", pero cuando hacemos efectivamente el script podemos ver que se ejecuta en la primera máquina y no se ejcuta en las demás:

# while read server; do
    ssh $server 'uptime'
  done < list


La razón es que while lee de la entrada estándar (stdin) y el comando ssh toma el control de la entrada estándar, de manera que estropea el bucle que se está haciendo. Añadiendo la opción -n antes del comando ssh redirecciona a la entrada estándar que espera ssh de /dev/null, previniendo que ssh estropee el bucle.




De este modo el comando correcto que funcionaría sería:


# while read server; do
    ssh -n $server 'uptime'
  done < list





1 comentario:

Anónimo dijo...

Fiuu, gracias!
Solo me lo hacía en una máquina y me estaba volviendo loco.