script para telnet automático

Hola,

estaba buscando la manera de hacer un script de forma automática sobre diversos equipos a través de telnet y encontré esto:

#!/bin/sh

host=10.0.0.1
port=23
pass=xxxx
cmd1=24
cmd2=4
cmd3=21

( echo open ${host} ${port}
sleep 1
echo -e "r"
sleep 1
echo ${pass}
sleep 1
echo -e "r"
sleep 1
echo ${cmd1}
sleep 1
echo -e "r"
sleep 1
echo ${cmd2}
sleep 1
echo -e "r"
sleep 1
echo ${cmd3}
sleep 1
echo -e "r"
sleep 1
echo exit ) | telnet host

lo he probado y funciona. El caso es que no me queda muy claro la forma de proceder de los comandos, es decir, entiendo que primero se han de ejecutar los comandos situados a la izquierda de la pipe (echo y sleep) y la salida de estos comandos entraría a la aplicación telnet a través de la pipe. Sin embargo cuando ejecutas el script primero se ejecuta telnet y a continuación los comandos echo y sleep de forma secuencial.

La verdad es que no veo el por qué se ejecuta de esta manera.

Cualquier comentario será de agradecer.

Un saludo.

Jose.

Basicamente
sleep, espera una determinada cantidad de segundos. Por ejemplo sleep 5, espera 5 segundos antes de devolvernos la línea de comandos.

echo imprime un determinado texto en la terminal.

Entonces, lanza el telnet, hace un sleep para esperar que el otro host responda, pasa otra orden, espera de nuevo con sleep, y asi sucesivamente.

man sleep, man echo

salutti
Tiodary

PD: leete la lista de comandos, esta abajo a la izquierda en la seccion Articulos aca en esdebian

Hola,

gracias por la respuesta. Quizá me expliqué mal, se lo que hacen los comandos echo y sleep, el caso es que yo me esperaba lo mismo que has explicado pero el comportamiento es justo al revés, esa es mi duda.
Es decir si pruebas a ejecutar el comando verás que lo que primero se lanza es un telnet y a continuación todos los comandos echo y sleep de forma sucesiva.

Saludos.

Jose.

No entiendo completamente lo que quieres hacer. Si no quieres que esos comandos se ejecuten en el ordenador remoto simplemente cambia la | por ;

Aparte de todo esto, hoy en día nunca debería usarse telnet, siempre debería reemplazarse por ssh.

Hola,

a parte de que es cierto que es más seguro ssh que telnet, la cuestión es que quizá no acabo de entender como funcionan las pipes porque tal y como se ejecuta el script y según entiendo yo los comandos se ejecutan de izquierda a derecha por lo tanto si leemos el comando de izquierda a derecha entiendo que primero se deberían ejecutar los comandos echo, sleep etc... y la salida de estos comandos debería entrar a la aplicación telnet.
La realidad es diferente ya que si se ejecuta el script primero se lanza la aplicación telnet y a continuación los comandos echo, sleep etc... de forma sucesiva, esa es mi duda que no acabo de ver porque primero se ejecuta telnet si está a la derecha de la pipe.

Gracias de antemano.

Un saludo.

Jose.

jgarciallamas escribió:

Hola,

a parte de que es cierto que es más seguro ssh que telnet, la cuestión es que quizá no acabo de entender como funcionan las pipes porque tal y como se ejecuta el script y según entiendo yo los comandos se ejecutan de izquierda a derecha por lo tanto si leemos el comando de izquierda a derecha entiendo que primero se deberían ejecutar los comandos echo, sleep etc... y la salida de estos comandos debería entrar a la aplicación telnet.
La realidad es diferente ya que si se ejecuta el script primero se lanza la aplicación telnet y a continuación los comandos echo, sleep etc... de forma sucesiva, esa es mi duda que no acabo de ver porque primero se ejecuta telnet si está a la derecha de la pipe.

Gracias de antemano.

Un saludo.

Jose.

porque en realidad si no me equivoco lo que telnet esta ejecutando es lo que devuelve los otros comandos es decir la salida de los otros comandos
-----EDITADO-----
Tu código es lo mismo que hacer esto

#!/bin/sh

host=10.0.0.1
port=23
pass=xxxx
telnet $host $PORT << EOF
pass
24
4
21
exit
EOF


P.D: Este código puede contener algún error, pues no lo he probado.