elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [?] Bash Script SSH
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Bash Script SSH  (Leído 2,594 veces)
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
[?] Bash Script SSH
« en: 14 Diciembre 2013, 12:00 pm »

Buenas, pues tengo un pequeño problemilla, estoy intentando ejecutar un comando en otro pc sin ser root vía SSH, con "sudo $Comando", pero no se como modificar el script  :rolleyes:

Código
  1. #!/bin/bash
  2. HOST="Aqui la IP"
  3. USER="Aqui el Usuario"
  4. PASS="Aqui la Contraseña del Usuario"
  5. CMD=$@
  6. VAR=$(expect -c "
  7. spawn ssh -o StrictHostKeyChecking=no $USER@$HOST sudo $CMD
  8. match_max 100000
  9. expect \"*?assword:*\"
  10. send -- \"$PASS\r\"
  11. send -- \"\r\"
  12. send -- \"$PASS\r\"
  13. send -- \"\r\"
  14. expect eof
  15. ")
  16. echo "==============="
  17. echo "$VAR"

La salida que da es:

Citar
?@Ubuntu:/home/?/Desktop$ ./System.sh "reboot"
===============
spawn ssh -o StrictHostKeyChecking=no Usuario@IP sudo reboot
Usuario@IP password:
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

A ver si me pueden ayudar...  :huh: :huh:

PD: Para que funcione tenemos que tener expect instalado  :silbar:


Citar
apt-get install expect

Saludos


En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: [?] Bash Script SSH
« Respuesta #1 en: 21 Enero 2014, 22:12 pm »

Mmm... efectivamente, tienes que tener instalado spawn. Yo para hacer esto que tu dices simplemente uso una conexión SSH o RSH en shell script, tan sencillo como esto:

Código
  1. MAQUINA="123.123.123.123"
  2. echo "Mi Linux remoto es: $(rsh $MAQUINA cat /etc/redhat-release)"

Si quieres hacerlo con SSH en vez de con RSH es igual pero le tienes que pasar password y/o puerto, y mi recomendación es que se lo pases como argumentos, y jamás almacenes un dato así a fuego en un script.

Sin embargo, yo en mi trabajo suelo utilizar mucho mas lenguajes como C o como Tcl para hacer estas cosas, sobre todo si el script ha de interactuar en función de la respuesta del último comando lanzado en remoto, y para ello uso la librería "expect", sobre todo en Tcl, que me gusta un montón, por ejemplo:

lista_maquinas.txt
Código
  1. maquina1
  2. maquina2
  3. maquina3

run.sh
Código
  1. #!/usr/bin/ksh
  2.  
  3. if [ $# -ne 1 ]
  4. then
  5. echo " ERROR: Falta especificar la password de tu usuario personal."
  6. exit
  7. fi
  8.  
  9. for i in `cat lista_maquinas.txt`
  10. do
  11. ./expect.tcl $i $1 > /dev/null 2>&1
  12. done

expect.tcl
Código
  1. #!/usr/bin/expect -f
  2.  
  3. set host [lindex $argv 0]
  4. set password [lindex $argv 1]
  5. set prompt "(%|% | %|~|~ | ~|#|# | #|>|> | >|\\$|\\$ | \\$)$"
  6. spawn ssh $host
  7. expect {
  8. "assword:" {
  9. send "$password\n"
  10. }
  11. -re $prompt {
  12. send "echo \" - Estoy haciendo un \\\"uname\\\": \$(uname)\"\n"
  13. expect -re $prompt
  14. send "banner \"Prueba\"\n"
  15. expect -re $prompt
  16. }
  17. }
  18. set tpid [exp_pid -i $spawn_id]
  19. exec kill -9 $tpid
  20. wait -i $spawn_id

No te asustes con la declaración de la variable prompt en mi ejemplo Tcl, simplemente contemplo todas las posibilidades de prompt que me puedo encontrar en casi cualquier máquina Unix. Espero que te sirva, la verdad es que el Tcl y el Shell Script lo utilizo muchisimo por que es super fácil.

Un saludo.


« Última modificación: 21 Enero 2014, 22:15 pm por jdomgo3 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
script bash (ubuntu): Parar un proceso sin salir del script (SOLUCIONADO)
Scripting
moikano→@ 6 11,101 Último mensaje 28 Octubre 2010, 15:48 pm
por moikano→@
[Bash script] equivalente de goto en batch para bash (SOLUCIONADO)
Scripting
moikano→@ 4 16,168 Último mensaje 4 Noviembre 2010, 15:58 pm
por moikano→@
[Bash] Abrir un proceso o otro script bash en una nueva shell
Scripting
nhaalclkiemr 2 14,061 Último mensaje 27 Agosto 2011, 06:23 am
por nhaalclkiemr
Script en Bash
Scripting
sora_ori 0 1,722 Último mensaje 24 Marzo 2013, 11:49 am
por sora_ori
[BASH] Interactividad en script bash
Scripting
Hekaly 1 2,866 Último mensaje 14 Enero 2014, 00:07 am
por Hekaly
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines