Unix - Ejecutar ssh usuario@ip en un while

 
Vista:

Ejecutar ssh usuario@ip en un while

Publicado por Angel (5 intervenciones) el 17/06/2018 09:09:00
Buenas.

Al ejecutar:

1
2
3
4
while read var
do
ssh usuario@ip 'ejecutable_en_ip_dest' > fichero$var
done < fichero_origen

solo se ejecuta para la primera linea de fichero_origen. No da ningun mensaje de error pero el programa termina.

Si en lugar de eso pongo:

1
2
3
4
while read var
do
echo $var > fichero$var
done < fichero_origen

funciona bien.

¿Se puede evitar de alguna manera? Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 35
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Ejecutar ssh usuario@ip en un while

Publicado por xve (70 intervenciones) el 17/06/2018 19:31:42
Hola Angel, si ejecutas la instrucción ssh manualmente, te devuelve el contenido correcto? es decir no te pide contraseña y ejecuta el comando correctamente?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ejecutar ssh usuario@ip en un while

Publicado por Angel (5 intervenciones) el 17/06/2018 21:49:41
Hola, xve. Gracias por contestar..

Sí, la ejecuta correctamente. De hecho, al final lo que hice fue utilizar el while para generar un fichero que ejecuta los ssh secuencialmente...pero no entiendo por qué no funciona el ssh dentro del while.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 35
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Ejecutar ssh usuario@ip en un while

Publicado por xve (70 intervenciones) el 18/06/2018 07:39:54
La verdad es que no lo entiendo... si hay un bucle, tendría que funcionar sin problema... como lo has realizado en la prueba del segundo código... no se ver porque no te funciona!!

Si averiguas el porque, ya nos comentaras...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 39
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Ejecutar ssh usuario@ip en un while

Publicado por Antoni Masana (19 intervenciones) el 20/06/2018 08:12:18
No entiendo que pretendes hacer en este bucle.
Se ejecuta el SSH tantas veces como líneas tenga el fichero fichero_origen creando para cada ejecución un fichero.
Si una de las líneas del fichero leído tiene el texto _origen este se machaca.
Mi pregunta:
¿Que sentido tienen ejecutar el mismo script en el mismo usuario y en la misma IP varias veces y guardar el resultado, si lo hay, en varios ficheros?

Podrías probar esto y ver que sale:
1
2
3
4
5
set -x
while read var
do
   echo "ssh usuario@ip 'ejecutable_en_ip_dest' > fichero$var "
done < fichero_origen

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ejecutar ssh usuario@ip en un while

Publicado por Angel (5 intervenciones) el 20/06/2018 09:14:40
Hola, Antoni. Muchas gracias por tu comentario.

El propósito del script es que en cada ssh se hace una cosa distinta según un parámetro que se lee de fichero_origen. Concretamente hace un telnet a una ip que se obtiene a partir de un nombre que está en fichero_origen, y cada respuesta se guarda en un archivo. Igual tenía que haber sido más explícito al plantearlo. Sería:

ssh usuario@ip 'ejecutable_en_ip_dest' $var > fichero$var

Tu propuesta genera una línea para cada valor de var. Es lo que hice para generar un fichero con las sentencias ssh y así las ejecuta secuencialmente.

Cuando intento hacerlo con el bucle, lo ejecuta para el primer valor y lo termina. Es como si el retorno del ssh provocara un break en el bucle. Adedmás no da error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 39
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Ejecutar ssh usuario@ip en un while

Publicado por Antoni Masana (19 intervenciones) el 21/06/2018 08:32:04
El problema debe estar en el ejecutable_en_ip_dest que devuelve algún valor que hace cancelar el while

He realizado esta prueba y me funciona

1
2
3
4
while read var
do
   ssh usuario@ip "/usr/sbin/ping $var" > fichero_$var
done < fichero_origen

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ejecutar ssh usuario@ip en un while

Publicado por Angel (5 intervenciones) el 21/06/2018 12:21:15
Gracias de nuevo, Antoni.

Aunque sea un simple ping me ocurre lo mismo. Se ejecuta para el primer valor y termina el bucle sin procesar las sucesivas líneas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 39
Ha mantenido su posición en Unix (en relación al último mes)
Gráfica de Unix

Ejecutar ssh usuario@ip en un while

Publicado por Antoni Masana (19 intervenciones) el 21/06/2018 23:29:00
Pues es un misterio porque lo he probado tal cual (cambiando usuario y la ip por uno valido en mi entorno) y me ha funcionado.
No domino el unix pero lo que se me ocurre es poner un echo Hola después del ssh para ver si lo ejecuta.
Hay alguna forma de capturar el código de retorno de un procedimiento creo que es un corchete algo, guizas #? ( no estoy seguro)
Revisa el contenido del fichero fichero_origen que no sea el el responsable del fallo.

Yo no se me ocurre nada más.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar