Copia de archivos entre dos servidores - El comando SCP

Primero necesitas una cuenta de Shell, yo entro con la terminal Putty y ahora ya podras copiar archivos entre dos maquinas linux o unix.

scp -r -C zonardc@unidadcroma.com:/home/zonardc/public_html/juegos/* /home/mastermx/juegos.unidadcroma.com/

para mover archivos o  directorios

mv sub.domain.com/* newdomain.com/

it is for moving the entire file/sub folder.

Acrónimo de Secure Copy, scp es una herramienta que trabaja mediante una conexión encriptada, que permite enviar y recibir archivos y carpetas de forma segura, eliminando la necesidad de protocolos como FTP, del que hablaremos a continuación.

Este es el comando para copiar remotamente archivos,

Copia el contenido dentro de ( no el directorio completo, por el /* ) , el chiste es utilizar rutas absolutas en el comando SCPSCP viene de secure copy, es una implementación de OpenSSH para realizar copias seguras a través de una red e Internet, en sustitución de rcp.

Un requisito es que la máquina a donde nos conectamos tenga un servidor de SSH activo (no importa que el cliente no). La sintaxis básica es:

scp [opciones] origen destino
Aquí aclaramos que hemos simplificado la sintaxis para facilitar la lectura, sin embargo puede ser más intrincada. cuando decimos [opciones], son los parámetros con que operamos; origen es el archivo o archivos que vamos a copiar y destino es a donde se va a copiar. Un ejemplo muy sencillo es el siguiente:

scp miarchivo.txt usuario@10.4.1.254:/home/carpeta/
En este caso, sólo tomamos un archivo local (miarchivo.txt) y lo pasamos a un servidor dentro de la LAN, donde vemos las siguientes características:

* usuario es el nombre del usuario activo en el servidor de destino, no necesariamente tiene que ser el mismo que el que ejecuta el comando localmente.
* @10.4.1.254 indica “en 10.4.1.254″, es posible sustituir la IP por el nombre de dominio del equipo, como por ejemplo, “miservidor.net”.
* :/home/carpeta/ define la carpeta donde se guardaran los archivos, donde debe tener permisos el usuario del primer punto. Sírvanse notar los dos punto (:), que separan el servidor de la carpeta interna.
El caso inverso, donde copiamos un archivo remoto a nuestra máquina es:

scp usuario@10.4.1.254:/home/carpeta/miarchivo.txt /home/miusuario
En todos los casos, es necesario escribir el password del usuario remoto, en caso contrario no podrá conectarse.

Dandole más potencia al comando, pdemos hacer lo siguiente:

scp -r ~/Documentos/respaldo/ usuario@10.4.1.254:/home/carpeta/
Con el parámetro -r se realiza recursivamente la copia, tomando todos los archivos y carpetas que tenemos bajo la ubicación indicada, dejando una copia en el servidor de destino con la siguiente ruta: /home/carpeta/respaldo/. Noten esta sutil diferencia:

scp -r ~/Documentos/respaldo/* usuario@10.4.1.254:/home/carpeta/
A diferencia del anterior, la ruta final será /home/carpeta/, ya que es el contenido y no la carpeta padre la que copia. Otra variación es:

scp -r -p ~/Documentos/respaldo/ usuario@10.4.1.254:/home/carpeta/
El parámetro -p mantiene la fecha, hora, usuario y privilegios de los archivos, muy util cuando clonamos la estructura de un servidor. Sino queremos ver las barritas de avance, usamos:

scp -r -q ~/Documentos/respaldo/* usuario@10.4.1.254:/home/carpeta/
Cuando lo soportan tanto por el cliente como el servidor, podemos hacer que los archivos se compacten al vuelo así:

scp -r -C ~/Documentos/respaldo/* usuario@10.4.1.254:/home/carpeta/
Si el puerto de SSH se ha cambiado digamos el 1995, hacemos los siguiente:

scp -r -P 1995 ~/Documentos/respaldo/* usuario@10.4.1.254:/home/carpeta/
Notese como -p y -p son dos parámetros diferentes. Finalmente, si tenemos un ancho de banda limitado, podemos definirlo en KB de la siguiente manera:

scp -r -l 20 ~/Documentos/respaldo/* usuario@10.4.1.254:/home/carpeta/
Algunas ventajas adicionales del uso de este comando es que es más rápido (en modo texto) que FTP en casi el 50% dado que el proceso de I/O es de archivo en archivo, no leyendo los archivos sino hasta que es su turno. Los usuarios de Windows pueden realizar este proceso mediante el programas como WinSCP. Recomendamos leer el man scp para que conozcan todas las opciones.

Con Linux podemos copiar archivos entre máquinas conectadas, ya sea en una red local o en Internet, sin necesidad de configurar un servidor de NFS o Samba. En este truco explico brevemente como usar 2 instrucciones que nos pueden facilitar la vida: scp y rsync

Estas dos utilidades vienen en cualquier distribución de linux y ambas funcionan usando ssh
scp

scp es un reemplazo del rcp, sus ventajas son que permite un nivel de seguridad mayor (ssh vs telnet) y que permite compresión de datos. La sintáxis de scp es muy sencilla
scp fichero_origen [otros_ficheros_a_copiar] fichero_destino

Es la misma que la del cp normal, ¿dónde está el truco? La gracia está en la forma de escribir los nombres de los ficheros, un nombre de fichero tiene la siguiente estructura:
[usuario@][maquina_remota:][directorio]nombre_del_fichero
Veamos ahora algún ejemplo:

Copiar el archivo local prueba en el directorio /tmp de la maquina test.bulma.net
scp prueba test.bulma.net:/tmp

Si la conexión es lenta y lo que trasmitimos es fácilmente comprimible podemos usar la opción -C
Copia un archivo texto.txt en el directorio /tmp de test.bulma.net usando el usuario pepe
scp -C texto.txt pepe@test.bulma.net:/tmp

También podemos usarlo para copiar directorios de forma recursiva con la opción -r
Copia el directorio /mnt/prueba y todo su contenido en el destino anterior
scp -r /mnt/prueba pepe@test.bulma.net:/tmp
rsync

rsync está diseñado para mantener sincronizados archivos y directorios ubicados en diferentes máquinas usando el mínimo de ancho de banda, aunque aumentamos el consumo de cpu en las dos máquinas implicadas en la transferencia. La idea a “grosso modo” es dividir el fichero en bloques, hacer una serie de operaciones con estos bloques (tipo md5) y comprobar las diferencias, en caso de que existan diferencias sólo se trasmiten estas. Un ejemplo de uso bastante práctico es cuando bajamos una imagen iso y al comprobar el checksum no nos coincide, en vez de volver a bajar la imagen completa nos conectamos al servidor rsync y “sincronizamos” nuestra imagen iso con la del servidor, más o menos en unos 20 minutos está hecho :) rsync es bastante más completo y complejo que scp y aquí sólo vamos a ver un par de ejemplos sencillos.

Copiar el archivo local prueba en el directorio /tmp de la maquina test.bulma.net
rsync prueba test.bulma.net:/tmp

Copia un archivo texto.txt en el directorio /tmp de test.bulma.net usando el usuario pepe y compresión de datos (opción -z)
rsync -z texto.txt pepe@test.bulma.net:/tmp

Copia el directorio /mnt/prueba y todo su contenido en el destino anterior
rsync -r /mnt/prueba pepe@test.bulma.net:/tmp

otra forma de escribirlo es
rsync /mnt/prueba/ pepe@test.bulma.net:/tmp

Mucho ojo, he escrito /mnt/prueba/ con / al final, si hubiese utilizado /mnt/prueba sólo habría copiado el directorio /mnt/prueba

rsync es muy práctico para realizar copias de seguridad, este comando realiza la copia del directorio local /home en la máquina copias.bulma.net usando el usuario backups, la opción –delete indica que los ficheros existentes en la copia que no estén en el original serán borrados, mucho ojo al usar esta opción, os recomiendo probar las opciones -n (modo simulado) y -v (o -vv verbose) antes de ejecutar el comando de forma definitiva.
La opción -a inidica que preserve los enlaces simbólicos y demás ficheros “extraños”
rsync -arzvv –delete /home backups@copias.bulma.net:/var/spool/copias

Últimas consideraciones, el uso de scp es mucho más rápido si no existen los ficheros que tenemos que copiar o si estos tienen un porcentaje de cambios muy elevado. Para evitar que nos pida el password cada vez podemos usar el programa ssh-agent o bien indicar un fichero de claves con la opcion -i en el caso de scp

http://bulma.net/body.phtml?nIdNoticia=1267

Por Celso González

Start Slide Show with PicLens Lite PicLens

0 Responses to “Copia de archivos entre dos servidores - El comando SCP”


Comments are currently closed.