Cómo transferir archivos de forma segura en Linux utilizando SCP

Al transferir archivos a un servidor Linux remoto, tienes algunas opciones. Una de las mejores maneras es usar un programa llamado Secure Copy, o SCP, que se ejecuta sobre el protocolo SSH para transferir rápidamente archivos a través de tu red a un sistema remoto. Este tutorial te muestra cómo transferir archivos de forma segura utilizando SCP en Linux.
Tabla de Contenidos
- Configuración de SSH
- Conectando a tu sistema a través de SSH
- Usando SCP para transferir archivos
- Comprimiendo la transferencia de archivos en SCP
- Optimizando una transferencia de datos con SCP
- Limitando el uso de ancho de banda en SCP
- Transferencia remota a remota con SCP
- Usando un proxy con SCP
- Cambiando el puerto por defecto en SCP
- Usando el modo silencioso de SCP
- Preguntas frecuentes
Configuración de SSH
En tu servidor remoto, necesitarás instalar un servidor SSH. El más común en Linux es el servidor OpenSSH. Para instalarlo, ejecuta uno de los siguientes comandos:
# Servidor basado en Debian/Ubuntu
sudo apt install ssh
# Fedora
sudo dnf install openssh
Dependiendo de tu distribución, puede que necesites permitir SSH a través de algunos firewalls de software. En Ubuntu, este problema no existe, pero en Fedora, también tendrás que ejecutar los siguientes comandos:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
Conectando a tu sistema a través de SSH
Antes de que puedas conectarte a través de SSH, necesitas averiguar la dirección IP del servidor remoto. En servidores gráficos, la dirección IP se muestra en el applet de red en la configuración del sistema. En la mayoría de los servidores, deberías usar el comando ip en el terminal.
ip addr
En la salida, busca la línea que comienza con inet bajo ethX o enpXsy, dependiendo de cómo esté conectada tu interfaz de red al sistema. En mi caso, es 192.168.68.108.
Para probar la conexión SSH, muévete a otra máquina Linux y escribe:
ssh usuario@dirección.ip.del.servidor.remotoCambia “usuario” por el nombre de usuario real en el servidor.

Ingresa la contraseña de esa cuenta y ya estarás listo. Si aparece una pregunta sobre la “autenticidad del host no puede ser establecida”, solo responde “sí”. Es un chequeo de seguridad diseñado para asegurarte de que te estás conectando a tu servidor real y no a un impostor. Deberías ver el mismo aviso que aparece en tu sistema cliente que ves al iniciar sesión directamente en el servidor, lo que significa que la conexión fue exitosa. También deberías configurar tus conexiones SSH para máxima seguridad, o incluso configurar la autenticación de doble factor, antes de proceder al siguiente paso.
Usando SCP para transferir archivos
Ahora que has probado la conexión SSH, comienza a copiar archivos entre las dos máquinas. La copia segura se logra utilizando el comando scp. El formato básico del comando scp es:
scp /RUTA/AL/ARCHIVO USUARIO@DIRECCIÓN-IP:RUTA/AL/DESINO/DESEADOPor ejemplo, para copiar el archivo “backup.tar.gz” desde la máquina local a la carpeta “backups” en el directorio personal del usuario “ramces” en el servidor remoto con dirección IP 192.168.68.165, usa:
scp backup.tar.gz [email protected]:~/backups/
Al igual que cuando te conectas con ssh, se te pedirá la contraseña. No se te pedirá el nombre de usuario, ya que se especificó en el comando.
También puedes usar comodines como el siguiente:
scp *.tar.gz [email protected]:~/backups/
Para copiar un archivo desde el servidor remoto a la máquina local, simplemente invierte los parámetros:
scp [email protected]:~/backups/backup.tar.gz ./
¿Notas el punto al final del comando? Significa “el directorio actual”, como lo hace con los comandos estándar cp o mv. Podrías especificar fácilmente otro directorio si así lo quisieras.
scp -r [email protected]:~/backups/ backups-del-servidor/Y lo mismo con los comodines:
scp [email protected]:~/backups/*.txz ./Para copiar recursivamente un directorio a un servidor remoto, usa la opción -r:
scp -r backups/ [email protected]:~/backups/
Para copiar recursivamente un directorio desde el servidor remoto a la máquina local, utiliza:
scp -r [email protected]:~/backups/ ./
Comprimiendo la transferencia de archivos en SCP
Aparte de la copia básica, también es posible modificar cómo SCP se comporta durante estas transferencias de archivos. Por ejemplo, puedes usar la bandera -C para comprimir los datos que SCP envía a los clientes remotos:
scp -C backup.tar.gz [email protected]:/home/ramces/Esta opción funciona comprimiendo cada paquete de datos a medida que se envía a través del programa SCP. Por lo tanto, esto puede ser increíblemente útil si estás en una conexión limitada de ancho de banda y deseas enviar de manera confiable un archivo a un servidor remoto.

Al igual que las opciones anteriores, también puedes usar -C junto a la bandera -r para comprimir y transferir archivos recursivamente a una máquina remota. Por ejemplo, el siguiente comando comprime y recupera el archivo “backup.tar.gz” de mi servidor remoto:
scp -Cr [email protected]:/home/ramces/backups /home/ramces/
Optimizando una transferencia de datos con SCP
En su mayor parte, SCP intenta usar el algoritmo de encriptación AES-128 para todas sus transferencias de archivos. Sin embargo, hay instancias donde este algoritmo en particular no será adecuado para los archivos que deseas transferir.
Sabiendo esto, es posible optimizar aún más y asegurar SCP al cambiar directamente el algoritmo de cifrado para una transferencia específica. Para hacer esto, necesitas usar la bandera -c seguida del cifrado que deseas utilizar.
Por ejemplo, el siguiente comando transfiere el archivo “backup.tar.gz” a mi servidor remoto utilizando AES-256:
scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
Además, la opción -c también te permite proporcionar una lista de cifrados que deseas utilizar para una transferencia de archivos particular. Por ejemplo, el siguiente comando utiliza tanto AES-192 como AES-256 mientras transfiere el archivo “backup.tar.gz” a mi servidor remoto:
scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
Limitando el uso de ancho de banda en SCP
Mientras que comprimir los paquetes de archivo puede ayudarte a usar SCP en condiciones de red deficientes, también es posible limitar el ancho de banda que el programa utiliza durante una transferencia. Esto es útil en casos donde estás usando una conexión medida y no quieres que SCP domine tu ancho de banda de red.
Para limitar el ancho de banda efectivo del programa, necesitas usar la bandera -l seguida del límite superior que deseas en kilobit por segundo (Kb/s). Por ejemplo, ejecutar el siguiente comando transferirá el archivo “backup.tar.gz” a mi servidor remoto a un ancho de banda efectivo de 1,600 Kb/s:
scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/
Transferencia remota a remota con SCP
Aparte de copiar archivos locales a tu servidor remoto y viceversa, también puedes usar SCP para administrar múltiples servidores remotos desde tu máquina local, ya que SCP solo se ocupa de la transferencia de archivos y no discrimina entre una máquina local y remota.
Para transferir entre dos servidores remotos, necesitas especificar explícitamente el nombre de usuario y la dirección de cada una de esas máquinas. Por ejemplo, ejecutar el siguiente comando transferirá mi archivo “remote-backup.tar.gz” entre mis dos servidores remotos:
scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/
Usando un proxy con SCP
Por defecto, SCP utiliza la dirección IP de tu máquina local siempre que transfiere archivos entre diferentes hosts. Si bien esto está perfectamente bien en situaciones normales, puede ser un problema si tu red local restringe cualquier actividad de SCP. Una forma rápida de solucionar este problema es pasar tu conexión local a través de un proxy SSH.
Para hacer esto, necesitas usar la bandera -o seguida de la opción ProxyCommand. Esto te permite crear una conexión SSH básica a una nueva máquina que, a su vez, ejecutará tu comando SCP. Por ejemplo, ejecutar lo siguiente creará un nuevo proxy SSH con una máquina remota y transferirá el archivo “backup.tar.gz” usándolo:
scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/
Cambiando el puerto por defecto en SCP
Aparte de crear un proxy SSH básico, también puedes cambiar el puerto por defecto para SCP. Esto es especialmente útil si estás asegurando tu servidor Linux y no deseas exponer ningún puerto por defecto.
Para usar SCP con un puerto diferente, necesitas usar la bandera -P seguida del número de puerto que deseas utilizar. Por ejemplo, el siguiente comando copiará recursivamente mi directorio “backup” y se conectará a mi servidor remoto utilizando el puerto 2222:
scp -r -P 2222 ./backup [email protected]:/home/ramces/
Usando el modo silencioso de SCP
Por último, también es posible eliminar completamente cualquier salida de terminal de un comando SCP. Esto es especialmente útil si deseas crear un script no interactivo que se ejecute en tu máquina. No solo eso, sino que también puedes automatizar completamente este proceso creando un cronjob y transfiriendo una clave SSH privada a tu servidor.
Para crear una transferencia SCP silenciosa, necesitas usar la bandera -q. Por ejemplo, el siguiente comando transferirá mi archivo “backup.tar.gz” silenciosamente a mi servidor remoto:
scp -q ./backup.tar.gz [email protected]:/home/ramces/
Preguntas frecuentes
Mi transferencia remota a remota en SCP no funciona. ¿Cómo puedo solucionarlo?
Este problema es probablemente debido a un puerto bloqueado en uno de los archivos de configuración de tus máquinas remotas. Para solucionar este problema, asegúrate de que el puerto por defecto para SSH esté abierto en ambas máquinas.
Este problema también puede deberse a que una de tus máquinas remotas está detrás de una conexión CG-NAT, por lo que cualquier conexión externa a tu máquina remota no se resolverá correctamente. Para solucionarlo, necesitas usar un programa de LAN Virtual, como Yggdrasil, que te permitirá atravesar CG-NAT.
Ejecuté un proxy SCP y el host remoto cerró la conexión. ¿Qué puedo hacer?
Este problema es probablemente debido a un problema con tu máquina proxy. Para iniciar correctamente un proxy SSH, asegúrate de que la máquina que deseas usar tenga el servidor OpenSSH y netcat. Para instalar estos programas en Ubuntu, ejecuta el siguiente comando: sudo apt install ssh netcat.
¿Es posible conocer todos los cifrados disponibles para SCP?
Por defecto, el programa SCP se basa mucho en el protocolo SSH para sus funciones criptográficas. Debido a eso, puedes usar el programa SSH para imprimir una lista de los cifrados que puedes usar junto a SCP. Por ejemplo, puedes ejecutar ssh -Q ciphers para imprimir una breve lista de todos los cifrados disponibles en tu máquina.
Créditos de imagen: Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.