Sei sulla pagina 1di 5

Comando scp Linux Copiar archivos entre servidores

http://www.juarbo.com/comando-scp-linux-copiar-archivos-entre-servidores/ scp ?

El comando scp en linux es utilizado habitualmente para copiar archivos de un servidor a otro, puede hacerse desde el servidor remoto para copiar los archivos al servidor local, o para copiar al archivos al servidor remoto desde el servidor local. Para no tener confusiones y para que quede claro, voy a explicar su forma de uso mas comn, copiar archivos desde un servidor hacia otro servidor. Veamos un ejemplo que nos seria bastante util para copiar archivos y carpetas de un servidor a otro:

scp -r * root@otroservidor.com:/home/web/www En primer lugar indicamos que vamos a usar el comando scp, luego, el -r indica que se deben copiar los archivos de forma recursiva, osea, que se van a copiar archivos, carpetas y archivos dentro de dichas carpetas en todos los niveles. Luego, indicamos los datos de acceso ssh del servidor al que vamos a copiar los archivos, en este caso se hace de la siguiente manera root (que es el usuario) @ (Signo arroba) otroservidor.com (Puede ser el dominio o la ip del otro servidor) : (Dos puntos) /home/web/www (La ruta dentro del servidor de destino donde deben ser copiados los archivos). Este comando se ejecuta en la carpeta donde estn los archivos que desean ser copiados, sino, deberamos especificar la carpeta de procedencia de los archivos, algo as:

scp -r /home/juarbo/www/* root@otroservidor.com:/home/web/www Esto es todo lo que se debe hacer para copiar archivos de un servidor a otro de forma rpida, si todo se realiza con xito, veras en la pantalla la informacin del copiado de cada uno de los archivos y de inmediato, podrs ver que dichos archivos irn apareciendo en el servidor de destino.

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 .

Tambin 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 contrasea. Lo vers 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.

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 -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. | grep Inte | cut -d" " -f4 | cut

Creo que lo que te pasa es que el script est terminando antes de que scp haya acabado de copiar el archivo. Prueba a aadirle un "expect $" para que espere a que la shell vuelva a estar disponible (el comando haya terminado) quedara 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

El tip: Cmo conectarte por SSH o SCP sin contrasea

Si eres como yo, probablemente siempre te ests conectando a los mismos tarros, y cuando se corta la conexin tienes que escribir la clave una y otra vez. O quizs quieres configurar un cron job que ejecute un comando remotamente o mande un archivo cada noche a cierta hora (algo que la peticin de contrasea te impide).

Con este truco puedes decirle al PC remoto que tal usuario est autorizado para conectarse sin contrasea desde tal computador, algo que hacemos a travs de las llaves RSA. Qu significa eso? Da lo mismo, por ahora lo importante es que lo hagamos funcionar! As dice el cuento. $ ssh-keygen -t rsa Este comando genera dos archivos, id_rsa.pub e id_rsd. Necesitamos copiar el contenido del primero al otro computador, especficamente al archivo authorized_keys dentro de ~/.ssh/ Primero copimoslo por SCP. $ scp id_rsa.pub usuario@servidor: Ahora conctate por SSH y ve si existe el archivo authorized_keys dentro de ~/.ssh/. Si ese no es el caso, escribe: $ mv id_rsa.pub .ssh/authorized_keys Si el archivo exista (que significa que para ese usuario en se PC, hay otros tarros de confianza). Vamos a copiar los contenidos de id_rsa.pub a authorized_keys: $ cat id_rsa.pub >> .ssh/authorized_keys Eso es todo! Ahora veamos si funciona, ejecutando un comando remotamente a travs de SSH (en este caso, uname -a). Obviamente no nos debera pedir la clave. $ ssh servidor.com uname -a Todo bien? Excelente! En este preciso instante acabas de hacer tu vida mucho, mucho ms fcil. Si no me crees, ya lo vers por t mismo. :)
I have a bash script that makes dump of DB then copies file from one server to another but it always asks for password before connection. scp file.tar.gz root@xxx.xxx.xxx.194:/backup Is there a way to pass password directly into script ?

Use the tool sshpass

sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/backup

scp uses SSH to tunnel to a remote server and transfer files. SSH can authenticate users with a password, an SSH key or both (recommended).

To transfer files without a password, create an SSH key for the user you're going to use (root is not recommended, use an unprivileged user instead and have a job on the target server as root to perform the privileged action).

Then you need to configure the target system's SSH daemon to accept SSH key connections (also in above link).

Bear in mind that compromised SSH keys without a password are the same as compromised passwords - anybody can get in. For real users, it's better to double the security and require the key and a password.

1. you have to use expect script.... for this...

Code:
#!/usr/bin/expect spawn scp /mnt/backup.tar root@235.658.158.325:/home set pass "REHRKJH564564" expect { password: {send "$pass\r"; exp_continue} }

Potrebbero piacerti anche