Usar scp y ssh en un scripts de shell

Hola

Quiero hacer un scripts para enviar datos a varias maquinas de la red local, para ello pienso usar el comando

scp -r Datos user@ip:~

el problema es que no se como le puedo introducir la contrasena a scp desde el scripts.

Saludos

Oye el blog esta muy bueno pero ademas desearia saber como puedo pasarle a scp la contrasenna mediante un scripts. Aunque con la informacion del blog puedo resolver mi problema. Muchas gracias

rcruz escribió:

Hola

Quiero hacer un scripts para enviar datos a varias maquinas de la red local, para ello pienso usar el comando

scp -r Datos user@ip:~

el problema es que no se como le puedo introducir la contrasena a scp desde el scripts.

Saludos

Busca usar un par de claves ,rsa/dsa para cada cliente .

También puedes probar a escribir el script usando expect, funciona poniendo el texto que el espera, y entonces le pasa a la terminal el texto que tu le digas, en este caso el usuario y luego la contraseña. Lo verás mejor con un ejemplo:

#!/bin/bash
/usr/bin/expect <<EOD
spawn ssh usuario@maquina
expect “password:”
send “password”
expect “$”
expect eof
EOD

Hay muchos tutoriales por google, una vez le has cogido el truco va muy bien.

Salut!

He intentado con expect y me funciona bien, pero todavia tengo un problema el comando que lanzo con spawn no termina de ejecutarse. Este es el scripts de expect que elabore:

#! /usr/bin/expect
set IP [lindex $argv 0]

spawn scp -r Datos estudiantes@${IP}:~/Desktop/

expect {
"yes?" { send -- "yes\r" }
}

expect {
"password:" { send -- "estudiantes\r" }
}

expect eof
exit

Y este es shell que lo usa:

#! /bin/sh

list_ips=`nmap 192.168.101.200-255  | grep Inte | cut -d" " -f4 | cut -d":" -f1`

for ip in $list_ips
do
./run_expect.sh ${ip}
done

Lo que sucede es que la carpeta "Datos" no se termina de copiar completamente para la maquina, al parecer se recibe el fin de fichero antes de tiempo. Sea lo que sea no tengo idea, tal vez es que esta mal programado pero no se.

Creo que lo que te pasa es que el script está terminando antes de que scp haya acabado de copiar el archivo. Prueba a añadirle un "expect “$”" para que espere a que la shell vuelva a estar disponible (el comando haya terminado) quedaría así:

#! /usr/bin/expect
set IP [lindex $argv 0]

spawn scp -r Datos estudiantes@${IP}:~/Desktop/

expect {
"yes?" { send -- "yes\r" }
}

expect {
"password:" { send -- "estudiantes\r" }
}
expect “$”

expect eof
exit

Ok, voy a probar asi,

Gracias