Pregunta de ssh y for

Hola Fragal!
Otra vez molestándote, ya te había preguntado a cerca del ciclo for y me ayudo mucho la respuesta que me diste pero ahora tengo otra duda acerca del for con ssh. Mi pregunta es que estoy haciendo un script que es el siguiente
for i in `cat servidores1`
do
ssh $i ls -la /usr/local/pc/ventanilla/ventanilla*.exe* >> $i.log
done
Quiero que este script haga la iteración del ssh en varios equipos.La lista de los equipos esta en el archivo servidores1. Así como lo tengo si me funciona pero el problema es que lo hace uno por uno y necesito que se realize de manera masiva para que afecte a varios equipos al mismo tiempo.
En windows lo me ha funcionado con el comando start pero en unix no se si hay un equivalente he estado buscando y no he encontrado nada.
Espero me puedas ayudar
Un gran saludo.

1 Respuesta

Respuesta
1
No entiendo qué quieres decir con " ... que se realice de forma masiva ...".
Por lo que entiendo de tu for es que quieres, para una serie de máquinas un listado (ls -al) de una serie de ficheros de forma remota (comando ssh; por cierto, ¿qué UNIX utilizas? Porque yo uso Solaris y la ejecución remota es con el comando rsh). Y la salida va a <maquina>.log (por cierto, no te hace falta la redirección >> pues lo hace por cada máquina).
Si lo que quieres es un log común, yo pondría:
rm log 2> /dev/null
for i in `cat servidores1`
do
echo $i >> log
ssh $i ls -la /usr/local/pc/ventanilla/ventanilla*.exe* >> log
Echo "--------------------------------------------" >> log
Done
Con la primera línea borras el fichero log por si existe y así empezar de cero.
De esta forma separas el listado de cada máquina en un solo fichero.
Todo esto lo metes en un fichero lanzar. Sh, le das permisos de ejecución y lo ejecutas.
Explícame eso de forma masiva ...
Hola Fragal!
Gracias por responder. A lo que me refiero con forma masiva es que se realize al mismo tiempo. Que en lugar de que lo haga uno por uno abra un proceso para cada servidor y se realize al mismo tiempo, esto es por que tengo que actualizar al rededor de 600 equipos y en ocasiones tengo que enviar hasta 9 megas de información, por lo mismo no me alcanza el tiempo parta actualizar todos los equipos si lo realizo de uno en uno. El Unix que utilizo también es solaris pero utilizamos ssh para conectarnos remotamente a los equipos.
Saludos.
Ya te entiendo. Se me ocurre un script que a su vez crea otro script y se ejecuta éste. Este script creado contiene los comandos ssh que se lanzan en background. Es lo más cercano a "... de forma masiva ..." que se me ocurre:
#!/usr/bin/ksh
for i in `cat servidores1`
do
echo "ssh $i ls -la /usr/local/pc/ventanilla/ventanilla*.exe* > $i.log &" >> log.borrar
Done
Sh log. Borrar
Rm log. Borrar
Como ves se genera el script log. Borrar con comandos ssh en background (&), que se lanza y se borra (¿para qué lo queremos ya?).
Lo he probado y es instantáneo. Con 600 máquinas se rá casi simultáneo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas