Transferir archivos con SCP por SSH

  • Por
Cómo enviar archivos desde un ordenador a un servidor remoto y viceversa, usando una transferencia segura por medio de SSH con el comando SCP.

Cuando gestionamos servidores habitualmente tenemos que transferir archivos desde nuestro ordenador al servidor remoto y al revés. En la mayoría de los casos las transferencias las realizamos por FTP, subiendo archivos al directorio donde se alojan las webs de ese servidor, pero no siempre tenemos disponible un servicio de FTP en el servidor remoto. ¿Qué hacemos entonces?

En este manual aprenderás a transferir archivos a un servidor al que solo te puedes conectar por ssh, por línea de comandos, una situación nada extraña. Ya sabes que SSH te permite conectarte al servidor y acceder al terminal para ejecutar cualquier comando de consola, pero esa conexión SSH no te permite traerte ningún archivo a tu ordenador, o depositar archivos en el servidor remoto. Para ello existe un comando diferente, totalmente independiente de ssh que te hace la labor, llamado scp.

Nota: Antes de nada aclarar que con FTP puedes transferir archivos con un cliente de FTP que te facilita mucho la vida. Por línea de comandos con scp la verdad es que es bastante más engorroso, pero a veces no hay otro remedio. Con FTP solo puedes descargar o enviar archivos en las carpetas habilitadas para ello. A veces los archivos los quieres poner en otra localización, o tienes que descargar archivos que no están en una ruta accesible por FTP. No habría problema, puesto que accediendo por SSH podrías copiar los archivos que deseas descargar en la ruta alcanzable mediante FTP. O si lo que necesitas es subir archivos, simplemente los subes donde FTP te lo permita y luego los mueves desde SSH hacia la carpeta donde realmente los necesitas. Esto es lo que suelo hacer yo en mi día a día, siempre que en el servidor se pueda hacer FTP. Este artículo te ofrece una vía alternativa para cuando no tienes FTP.

Comando scp

El comando scp está disponible tanto en Linux como en Mac. Si estás usando Windows seguro que hay alguna forma también de usar ese comando. Yo ahora mismo la desconozco, pero sé que hay un software (no lo he probado nunca) que se llama WinSCP que te puede hacer esta tarea también, incluso con una interfaz gráfica.

El comando es muy sencillo de usar, simplemente indicamos el archivo origen, con su ruta y el archivo destino, con su ruta también. El tema es lidiar con la conexión con el servidor remoto, que nos hace que se complique un poco la sintaxis.

Internamente las conexiones de scp se realizan por un túnel SSH, por lo que, para referenciar el servidor remoto, usaremos los mismos datos de conexión que venimos usando para conectarnos por SSH.

Podemos ver mediante unos ejemplos cómo funciona este comando.

Nota: Según nos comentan entre los comentarios (gracias dolphinziyo) existe un programa en Windows llamado WinSCP, un cliente que emplea SSH para enviar archivos como si fuera por el tradicional FTP. Puede estar muy bien para quien esté trabajando en este sistema y no le guste operar por la línea de comandos.

Subir un archivo desde local al servidor remoto

Supón que tienes un archivo en tu máquina local y lo quieres transferir a un servidor remoto. Usas el comando con la siguiente sintaxis.

scp nombre_archivo usuario@servidor:ruta_servidor_donde_colocar_archivo

Recuerda que la conexión se realiza por ssh, imagina que tu servidor se llama “example.com” y el usuario con el que te conectas a la máquina es “root”. Imagina que el archivo que intentas subir se llama “archivo_a_subir.zip” y que lo quieres dejar en la carpeta /var/www/example.com del servidor remoto.

scp archivo_a_subir.zip root@example.com:/var/www/example.com/

El nombre del server también podría ser perfectamente una dirección IP y por supuesto, el usuario no tiene por qué ser root.

scp otro_archivo_a_subir.js miusuario@112.223.4.215:/otra/carpeta/destino/

Descargar un archivo desde un servidor remoto a nuestro ordenador local

Este segundo caso es casi idéntico, solo que intercambiamos el origen y el destino. Las explicaciones dadas hasta ahora son básicamente las mismas.

scp usuario@servidor:ruta_servidor_donde_esta_el_archivo ruta_ordenador_local_donde_poner_el_archivo

Con datos de conexión similares a los de antes, el comando nos saldría como este:

scp root@example.com:/var/www/example.com/archivo_a_descargar.html archivo_a_descargar_nombre_en_local.html

Hay algunas opciones útiles para trabajar con el comando scp, puedes acceder a la ayuda con el comando “man scp”. Comparto contigo una opción que uso bastante para realizar la copia de todos los archivos de una carpeta, de manera recursiva, copiando también el contenido de las subcarpetas. La opción es -r.

scp -r root@161.0.0.1:/var/www/desarrolloweb.com/carpeta/ ruta_destino_en_local/

Esto te copiará todos los archivos que en el servidor remoto encuentras en la ruta “/var/www/desarrolloweb.com/carpeta/“ (incluso con las carpetas que puedas encontrar en esa ruta). Los descargará y se colocarán en tu ordenador local en la carpeta “ruta_destino_en_local”.

Espero que con estas notas puedas usar sin problemas tu línea de comandos para transferir archivos al servidor de forma segura, por scp, usando un túnel SSH, algo que seguramente tendrás que incorporar tarde o temprano en tus flujos de trabajo para desarrollo en la web.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

dolphinziyo

25/2/2015
Para Windows está WinSCP
Para Windows hay un programa gratuito para hacer esto mismo que se llama WinSCP, es muy fácil de usar y muy útil, sobre todo para enviar o recibir ficheros entre Windows y Linux.
Saludos.

midesweb

26/2/2015
Muchas gracias Dolphinziyo
Acabo de agregar una referencia a este software que nos recomiendas en el texto del artículo. Muchas gracias, seguro que a muchos les vendrá bien conocerlo.

Luis Lores

21/7/2015
Cyberduck para Mac
Buen post gracias, para los usuarios que usan Mac OS X Cyberduck es una excelente herramienta, similar a WinSCP para windows.
https://cyberduck.io/
Saludos.

Paloma

10/9/2015
subir un directorio entero con scp
Hola, muy útil la información. Para complementarla os apunto lo que he aprendido para subir una carpeta completa con scp

scp -r micarpetalocal root@servidor.example.com:/ruta/donde/subir/carpeta

Así todo el directorio llamado "micarpetalocal" se subirá al servidor en la ruta creada. Esa ruta debe existir en el servidor remoto y en ella se creará la carpeta "micarpetalocal" con todo su contenido que tuviéramos en el ordenador.

Walter

08/5/2017
Articulio
Buen articulo.

Me sirvio mucho funciono. lo malo que igual la transferencia es lenta. podrias hacer uno con udp-cast