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: