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.

Etiquetado . Bookmark the permalink.

11 respuestas a Copiar archivos utilizando SCP en Linux

  1. Pingback: Wordpress balanceado en varios servidores | Fernando Gomez

  2. Codigo82 says:

    Muy buen post, bien explicado y con ejemplos claros.
    Gracias por compartirlo, un saludo.

  3. victor says:

    qeu bien esta resumido y que ejemplos mas claros1

  4. maculdes says:

    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)

    • 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!

  5. Pingback: Copiar fichero usando SCP en Linux | TaSTeRPC – Blog

  6. Emanuel says:

    Muchas gracias! no podia sacar el comando andando y esto me fue de gran ayuda.

  7. Héctor says:

    Hola, gracias por el post.
    Me preguntaba, ¿hay alguna forma de copiar sólo una parte de los archivos de un directorio con scp? Me ha pasado que se ha perdido la conexión durante una descarga, y me gustaría saber si puedo ahora copiar sólo los archivos que me faltan (sin modificar del directorio original, si puede ser).

  8. Agustin says:

    Muchas gracias!

  9. Bernardo GT says:

    Excelente aporte, te agradezco la informacion.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *