Estamos acostumbrados a ejecutar de manera muy simple comandos en nuestra máquina local y si esto fuera tambien fácil de hacer respecto a otra máquina remota. Veamoslo con un sencillo script en bash (nota: necesitas tener «expect» instalado en tu máquina local).
Crea un script «execute.sh» con el siguiente contenido:
#!/bin/bash HOST="aqui_pon_la_maquina_remota" USER="aqui_pon_el_usuario_remoto" PASS="aqui_pon_el_password_remoto" CMD=$@ VAR=$(expect -c " spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD match_max 100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") echo "===============" echo "$VAR"
Y listo!, dale permisos de ejecución
$ chmod +x execute.sh
y ya puedes emplearlo, por ejemplo con:
$ ./execute.sh «ls -l»
Te mostrara un listado de archivos pero de la maquina remota.
Genial, para automatizar algunas tareillas.
Actualizado | Ya de paso y basandome en el ejemplo os dejo los scripts «download.sh» y «upload.sh» que acabo de implementar y pueden usarse para subir y bajar ficheros al servidor mediante scp.
#!/bin/bash HOST="aqui_servidor" USER="aqui_usuario" PASS="aqui_password" CMD=$@ VAR=$(expect -c " spawn scp -r $USER@$HOST:$CMD . match_max 100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") echo "===============" echo "$VAR"
#!/bin/bash HOST="aqui_servidor" USER="aqui_usuario" PASS="aqui_password" FICHEROS=$1 DIRECTORIO_REMOTO=$2 VAR=$(expect -c " spawn scp -r $FICHEROS $USER@$HOST:$DIRECTORIO_REMOTO match_max 100000 expect \"*?assword:*\" send -- \"$PASS\r\" send -- \"\r\" expect eof ") echo "===============" echo "$VAR"
Gracias a | nixCraft
Relacionado:
http://www.cyberciti.biz/faq/oracle-mysql-sql-commands-shell-scripting/
Piwi , como harias un mini-script , por ejemplo «proxy.sh», para colocarlo en la carperta «/usr/bin» con permisos de ejecucion establecido
Que este, te deje colocarle , la direccion o nombre de HOST del Proxy y el puerto
ya sea
Direccion :172.32.1.1
Puerto : 3128
o en su defecto asi
Direccion & Puerto : 172.32.1.1:3128
Haciendo que esos datos sean introducidos por el usuario , es usando READ ???
para luego que los use
export http_proxy=»direccion»:»puerto»
export ftp_proxy=»direccion»:»puerto»
Porque estoy arto de lanzar la linea en Slackware en el trabajo xD.
# Establecer proxy (http & ftp) desde la terminal :
export http_proxy=http://172.32.1.1:3128 && export ftp_proxy=ftp://172.32.1.1:3128
y en caso de introducir letras , que devuelva un mensaje que solo se permiten numeros xD 😛 ????
Suena muy complejo para lo sencillo que lo quiero ???
Hombre, el script no es complicado, pero eso que cuentas son solo variables de entorno. no te es mas facil dejarlas definidas en tu .bashrc y /etc/environment
http://ubuntuforums.org/showthread.php?t=1228919
Asi ya no tienes que meterlas de nuevo cada vez que arranques
Hola digamos q quiero ejecutar un script de manera remota, es decir quiere ejecutar un script: actualizar.sh, como le haria para que se ejecute usando tu script de conexion ssh, no se si me explique? de todos modos gracias y gracias por el script
Tendrias que tener el script ya subido a remoto y con permisos de ejecución, para ello antes podrias por ejemplo subirlo via ftp.
una vez en remoto, ya puedes ejecutarlo en plan:
/ruta/al/script/script.sh
Primero muchas gracias por el script. Soy muy nuevo en esto de los script y tengo una duda.
Una vez que ejecuto el script este se conecta y automaticamente sale, yo necesito quedarme conectado al servidor ssh.
Como podria hacerlo?
Espero haber sido claro
Muchas gracias.
Muchas gracias por el script, lo estaba necesitando ahora. Creo que me faltaba el expect y el send, pues tenía el problema de la solicitud del password, y pues no tengo permisos sobre el servidor ssh para crear certificados de origen.
Muchas gracias de nuevo.
entonces esta mejora que hice te interesara más:
https://ubuntulife.wordpress.com/2011/02/16/script-mejorando-la-productividad-automatizando-conexiones-ssh-mediante-expect/
Muy bueno, muy útil. Gracias por compartir
Estoy armando un script parecido pero se me complica porque por temas de seguridad el acceso root directamente esta restringido y primero tengo que entrar con usuario normal para luego subir con ‘su’ a root, no se como hacer para indicar en el script que suba a root. pf me podrias dar alguna idea? gracias
Hola!!
De verdad me sivió de mucho el scripts, te pasaste!!
Tengo una pregunta como lo puedo hacer para que me guarde en un archivo log cosas de como si la conexion falla o si la copia tuvo exito,,,
Saludos
Holas disculpa pero cuando ingreso a mi servidor por ssh y ejecuto comandos que quiero permanescan activos aun mas alla de cuando yo cierre la ventana de coneccion como podria hacer eso?
lo que hago es lo siguiente me conecto a uns erver ubuntu desde windows con putty ejecuto comandos que quiero se mantengan en ejecucion despues de cierre la ventana de putty se puede hacer eso?
gracia de antmano
Muy bueno el script, lo voy a probar.
Estoy haciendo un sistemita basado en bash para habilitar/deshabilitar el acceso remoto a servidores basado en permisos de usuario para mi oficina.
La difucultad es que el area de soporte debe acceder a todos los servidores pero el area de desarrollo no, y es imposible acordarse la ip y el password de 100 clientes. Ademas el tecnico de guardia debe poder acceder desde su casa, por lo que intentamos que deba bajarse la menor cantidad de programas posibles.
Este script nos viene de 10, ya que puede estar almacenado en un server de la oficina (almacenando los passwords en una base de datos) y el tecnico de guardia solo debe tener los certificados de la VPN de la oficina.
Muy buen aporte!!!!
Gracias por informarme sobre expect. Yo necesito automatizar la conexión a unas máquinas que tienen consola propia (Osmon).
Pero este script falla:
syntax error at line 6: `VAR=$’ unexpected
No encuentro el error ¿?
No se que es osmon y no encontre nada en google, pero parece que no te reconoce el simbolo $ en la declaracion de la variable VAR en la linea 6. En que sistema operativoestas corriendo el script???
hola buenas tardes tengo un problema al ejecutar este script
#!/bin/bash
HOST=»69.73.173.232″
USER=»elexis»
PASS=»*********»
FICHEROS=»/home/elexis/public_html/nuevo2″
DIRECTORIO_REMOTO=»/home/elexis/public_html/banner_index.fla»
VAR=$(expect -c »
spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /home/elexis/public_html/nuevo2
match_max 100000
expect \»*?assword:*\»
send — \»$PASS\r\»
send — \»\r\»
expect eof
«)
echo «===============»
echo «$VAR»
elexis@leyex.com [~]# chmod +x descargar.sh
elexis@leyex.com [~]# sh descargar.sh
El resultado es este nose porque. de antemano muchas gracias por su ayuda
: command not found
: command not found
The system has no more ptys. Ask your system administrator to create more.
while executing
«spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /h»me/elexis/public_html/nuevo2
===============
spawn scp -rp elexis@69.73.173.232:/home/elexis/public_html/banner_index.fla /home/elexis/public_html/nuevo2
fijate lo que comentan en esta pagina
http://www.linuxfromscratch.org//lfs/faq.html#no-ptys
Hola. He intentado modificar el script para utilizarlo con rsync y hacer backup de una carpeta remota pero no funciona correctamente. Si lo uso con una carpeta de prueba, pequeña, va bien pero con la carpeta real de trabajo que tiene algunos GB, tras unos segundos se corta el proceso con lo que el backup no es completo.
¿Alguien sabría a qué se debe?
Muchas gracias.
#!/bin/bash
HOST=»misitio»
USER=»miusuario»
PASS=»micontraseña»
VAR=$(expect -c »
spawn rsync -avz -e ssh $USER@$HOST:~/mdl ./Backup
match_max 100000
expect \»*?assword:*\»
send — \»$PASS\r\»
send — \»\r\»
expect eof
«)
echo «===============»
echo «$VAR»
Por el enlace http://linux.die.net/man/8/spawn entiendo que spawn solo puede funcionar durante unos segundos pero no localizo la forma de aumentar ese tiempo
yo te recomiendo lo siguiente a mi me paso (hace algún tiempo) y lo solucione asi:
1: Guardar un escript donde hace el proceso (backup) » la maquina local»
2.- Ejecutarlo via remota con algo asi:
#!/bin/bash
HOST=”misitio”
USER=”miusuario”
PASS=”micontraseña”
«mi script para backup»
:::::::::::::::::::::::::::::::::
espero que te sirva, y que me haya explicado, saludos 😉
amigo la manera de pasar las variables en el upload seria ./script.sh archivo.pdf /data/C1205 y ahora si quiero hacer una busqueda de un directorio se podra implementar?
estimado como Puedo Hacer PAra Que mi servidor Proxy con Open suse y Squid se ejecute digamos cada hora lo siguiente :
cd /etc/init.d
y luego
./firewall
ya que cada vez que hay un corte de fluido electrico tengo que ingresar via putty y ejecutarlo agradecere su ayuda al respecto
este script me sirve para transferir archivos de ubuntu a enlace ftp y que variables tendría que cambiar por su respuesta inmediata gracias
Hola, solicito de ayuda para ver de que manera puedo enviar una archivo ascci desde oracle/forms a otro servidor usando el FTP.
buenas, como haria para responder preguntas de un comando que se ejecuta en un shell script al iniciar seccion sabiendo que el mismo tiene que responderse ingresandolo por teclado y yo necesito que tome la respuestas de una variable guardada en un txt por ejemplo
Hola, como seria un script para eliminar archivos mayores a seis meses de una determinada ruta de una maquina remota, desde mi maquina local.
No es exactamente una pregunta sobre el script sino mas bien sobre admnistracion de linux. Fijate este sitio en ingles http://www.howtogeek.com/howto/ubuntu/delete-files-older-than-x-days-on-linux/
Que tal Superpiwi, oye tengo un problema con un script igual al tuyo, el problema es el que file que quiero pasar es algo grande y no lo copia completo, sera problema o factor el match_max? Ya lo he crecido y sigue pasando lo mismo, no hace la copia completa, el tamaño del fle es de:
521M
Alguna solucion para este problema?
Gracias y saludos….
Mmm, pero lo que quieres es transferir un archivo entiendo???- Entonces mejor usar scp.
Buenas, me gustaría saber como podría ejecutar un comando desde otros dos. Por ejemplo: Un windows(con linux subsystem) a otros dos linux en mi caso uso raspian. Gracias de ante mano