[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: expect ejecutar comando



El Sat, 28 Aug 2010 02:04:17 -0300, Rino Rondan escribió:

> Es que no hay python.... :( no es un entorno donde pueda instalar nada..
> es hacer conlo que hay lo que se pueda ... igual tengo que probar porque
> me agarro la duda con expect cuando mando un send \" `ls -la`\r\"
> 
> todo lo que ejecute con esas comillas o con $(ls -la ) lo resuelve
> primero de donde se ejecuta y no manda el comando al equipo remoto.. asi
> que voy a tener que leer la documentacion de como funciona bien el
> send.. pero si alguno ya paso por esto..
> 
> 2010/8/27 Angel Claudio Alvarez <angel@angel-alvarez.com.ar>
> 
>> El vie, 27-08-2010 a las 08:32 -0300, Rino Rondan escribió:
>> > Buenas:
>> >
>> > Me conecto con llaves o con ssh pero no todos tienen instalada las
>> > llaves.
>> > La idea es desde un servidor conectarse remotamente a otro servidor,
>> > correr un programa, este me genera una archivo, lo tengo que
>> > renombrar luego lo tengo que enviar por ftp.
>> > Con ssh no me lo plantee porque tiene que ser totalmente interactivo
>> > yaque no todos tienen llaves.
>> > Pero acepto otras soluciones :=)
>> >
>> >
>> python y su modulos pexpect
>> (hacerlo en bash es un dolor testicular)
>>
>> > Saludos
>> >
>> > 2010/8/27 AngelD <angeld@froga.net>
>> >         El Thu, 26 Aug 2010 21:47:52 -0300
>> >         Rino Rondan <villadalmine@gmail.com> escribió:
>> >
>> >
>> >         > Buenas:
>> >         >
>> >         > Tengo este  script del expect
>> >         >
>> >         > #!/bin/bash
>> >         > HOST=$1
>> >         > USER=$2
>> >         > PASS=$3
>> >         >
>> >         > VAR=$(expect -c "
>> >         > #set timeout -1
>> >         > spawn ssh $USER@$HOST
>> >         > expect \"*?assword:*\"
>> >         > send -- \"$PASS\r\"
>> >         > expect \"$ \"
>> >         > #send -- \"\r\"
>> >         > send \"sudo su -\r\"
>> >         > expect \"$ \"
>> >         > send \"cd /var/tmp/xxx/xxxgrab\r\"
>> >         > expect \"$ \"
>> >         > send \"/usr/bin/bash\r\"
>> >         > expect \"$ \"
>> >         > send \"cd outputs\r\"
>> >         > expect \"$ \"
>> >         > #send \" ls -la|head -1\r\"
>> >         > send \"cp  `ls -ls |sort -nr -k 7 -k 8 |awk '{print $10}'|
>> >         head -1`
>> >         > rino\r\" #send \"cp $(ls -ls |sort -nr -k 7 -k 8 |awk
>> >         '{print
>> >         > $10}'|head -1 rino\r\" expect \"$ \"
>> >         > send \"exit\r\"
>> >         > ")
>> >         > echo "=======RUN========"
>> >         > echo "$VAR"
>> >         >
>> >         >
>> >         > y lo que me hace es me trae (el ls) lo que hay en el equipo
>> >         donde
>> >         > tire el expect y no donde me acabo de conectar por ssh.
>> >         >
>> >         > la salida es
>> >         >
>> >         > xxxx:# cd /var/tmp/emc/emcgrab
>> >         > xxx:# /usr/bin/bash
>> >         > xxx:# cd outputs
>> >         > xxx:# cp  grabtesting  rino
>> >         > cp: cannot access grabtesting
>> >         > xxx:#
>> >         > cxxxx@xxx:/xxxhome/cxxxxx/bin %
>> >         >
>> >         > y ese grabtesting lo tengo en mi home directory desde donde
>> >         ejecute
>> >         > el grab.
>> >         >
>> >         > cxxx@xxx:/xxxhome/cxxxxx/bin % ls -la grab* -rwxr-----   1
>> >         > cxxxxx   whsysadm     597 Aug 26 17:31
>> >         grabtesting
>> >         > cxxxxx@xxxxxx:/xxxhome/cxxxxx/bin %
>> >         >
>> >         > La idea es que al conectarme por ssh al equipo remoto entre
>> >         a un
>> >         > directorio, filtro para buscar justo el archivo que quiero
>> >         > y
>> >         luego
>> >         > poder copiarlo asi lo renombro, para luego enviar ese
>> >         archivo a un
>> >         > ftp, asi que tambien tendria que guardar el nuevo nombre un
>> >         una
>> >         > variable para que cuando lo suba al ftp le ponga ese valor.
>> >         > se entiende??
>> >         > en el mismo proceso que invoco en la variable VAR 1
>> >         > conectarme por ssh
>> >         > 2 ir al path correspondiente
>> >         > 3 obtener y copiar un file con otro nombre 4 obtener ese
>> >         > file nuevo y guardarlo en una variable para
>> >         que lo use
>> >         > expect 5 conectarme por ftp
>> >         > 6 enviarlo el archivo guardado en la varia ble al ftp
>> >         >
>> >         > Me quedo sin saber como hacer el paso 3 porque me devuelve
>> >         otra cosa,
>> >         > despues nose como sera para guardar la variable.. porque
>> >         > tam
>> >         bien me
>> >         > toma todo como si fuera el equipo que ejecute el script.
>> >
>> >
>> >                Vayamos por partes. ¿Intentas utilizar expect para
>> >         conectarte a
>> >         una máquina por ssh?. Porque eso ya lo hace el propio ssh con
>> >         las
>> >         claves del fichero '~/.ssh/authorized_keys'. Una vez
>> >         realizado esto,
>> >         todo lo que comentas creo que se puede realizar utilizando
>> >         "ssh MACHINE
>> >         comando". ¡Incluso se puede automatizar el ftp con el fichero
>> >         '.netrc'!
>> >
>> >                Lo de guardar ficheros en variables es un poco bruto,
>> >         sobre
>> >         todo cuando es innecesario.
>> >
>> >                saludos --- Angel

Yo use esta guía para crear un comando para apagar un servidor local. A 
lo mejor te sirve, si te interesa te mando el programa autoexpect, que ya 
no esta disponible en el enlace.

http://infolinux.wordpress.com/2007/10/27/automatiza-tus-tareas-en-linux-
sin-saber-programar/

Suerte.

-- 
Marcos Delgado


Reply to: