Copiar archivos utilizando SCP en Linux
SCP (secure copy) es un comando de Linux que nos permite copiar directorios o archivos entre diferentes hosts que utiliza la autenticación SSH y por lo tanto provee el mismo nivel de seguridad.
Sintaxis
La sintaxis del comando, con las opciones más relevantes es las sigiuente:
scp [-p] [-v] [-r] [-C] [-i identity_file] [[username@]host:]file ... [[username@]host:]file_or_dir
Las descripción de las opciones es la siguiente:
- -p: preserva las fechas de modificación, acceso y modo del archivo original.
- -v: verbose mode. Habilita mensajes de debug para diagnosticar problemas de conexión, autenticación o configuración.
- -r: modo recursivo al copiar directorios (copia también los subdirectorios)
- -C: habilita la compresión en la conexión SSH
- -i identity_file: selecciona el archivo desde el cual se lee una clave privada. Esta clave privada se pasa a SSH a la hora de establecer la conexión
Ejemplos de uso
Enviar un archivo a un host remoto
scp archivo.txt usuario@host:/ruta/de/destino/archivoDestino.txt
Envía archivo.txt a host, a la ruta /ruta/de/destino, y lo graba con el nombre archivoDestino.txt. La conexión se establecerá utilizando el nombre de usuario especificado, y el dueño del archivo en el host será el utilizado en la conexión.
scp archivo.txt usuario@host:archivoDestino.txt
Si no se especifica la ruta de destino, se copiará al directorio del usuario especificado (/home/usuario).
scp archivo.txt host:archivoDestino.txt
Si no se especifica un usuario remoto, utilizará el nombre con el que estamos logueados actualmente en el host local.
Copiar un archivo desde un host remoto
scp usuario@host:/ruta/archivoRemoto.txt ./archivo.txt
Copia archivoRemoto.txt del host remoto a mi directorio actual, y lo nombramos archivo.txt.
scp usuario@host:archivoRemoto.txt ./
Copia archivoRemoto.txt ubicado en el home de usuario del host remoto a mi ubicación actual.
Copiar un directorio entero hacia un host remoto
scp -r dirLocal usuario@host:/ruta/de/destino/
Este comando copia el directorio dirLocal a /ruta/de/destino en el host remoto, conectándonos como usuario. El directorio de destino ya debe de existir.
Otra opción es crear un archivo tar o tar comprimido (.tar.gz), copiar ese único archivo y descomprimirlo en el destino.
Copiar un directorio entero desde un host remoto
scp -r usuario@host:/ruta/dirRemoto/ /tmp/
Copia el directorio /ruta/dirRemoto ubicado en el host remoto, y lo copia en el directorio local /tmp
Copiar un archivo entre hosts remotos
Otra de las posiblidades del comando SCP es copiar un archivo (o directorio, similar a los ejemplos antes mostrados) desde un host remoto a otro host remoto.
scp usuario1@host1:/ruta/en/host1/archivoHost1.txt usuario2@host2:/ruta/en/host2/archivoHost2.txt
En este ejemplo, usuario1 es un usuario de host1, mientras que usuario2 es un usuario de host2.
Uso desde Windows
Si necesitamos copiar archivos o directorios desde un ambiente Windows podemos utilizar la excelente aplicación WinSCP, que nos provee una interfaz gráfica para mover, copiar, renombrar, cambiar permisos, etc. Su interfaz es muy intuitiva, y nos permite visualizar el contenido local y remoto con dos paneles al estilo Norton Commander o con otro estilo más parecido al explorador de Windows.
Posts relacionados:
9 noviembre, 2010 - 13:40
Muy buen post, bien explicado y con ejemplos claros.
Gracias por compartirlo, un saludo.
25 noviembre, 2010 - 17:37
qeu bien esta resumido y que ejemplos mas claros1
27 diciembre, 2010 - 18:09
yo tengo un serv de bd y quiero copiar todos los dias el backup que se genera en un disco usb. como lo puedo hacer.
y si quiero poner ese disco USB en una estacion de windows2003 server como podria hacer para que copie desde linux a windows ???. el entorno de de mi serv. linux esta en nivel 3 (modo consola)
28 diciembre, 2010 - 23:35
Yo creo que teniendo el backup, un trabajo cron que inicie un script que copie el archivo sería lo mejor. En ese script, podrías montar algún directorio compartido del disco USB (ver comandos smbclient, mount -t cifs). Ese trabajo cron podría ejecutarse todos los días a una determinada hora.
Saludos y suerte!