¿Alguna vez has necesitado transferir archivos entre equipos en red y te has encontrado con problemas de seguridad? No puedes lanzar tus archivos a la red y esperar que lleguen seguros, como si de un cuento de hadas se tratara. Necesitas medidas de seguridad reales. Debes usar un protocolo de transferencia de archivos que proteja tus datos frente a accesos no autorizados, interceptación de tráfico, filtraciones y otras amenazas.
El Protocolo de Copia Segura (SCP) es un protocolo de red para la transferencia de archivos entre distintas máquinas. En este artículo, exploraremos cómo funciona SCP y cómo usarlo para transferir archivos desde máquinas remotas a locales.
¿Cómo funciona SCP?
SCP utiliza SSH (Secure Shell) para transferir archivos. ¿Qué significa esto exactamente? SSH es un protocolo de red que permite el acceso remoto seguro a servidores. Incluye mecanismos para autenticar, cifrar y verificar la integridad de los archivos transmitidos. SCP se apoya en estas funciones de seguridad y en los métodos de cifrado de SSH para transferir archivos de forma segura a través de una red. Así puedes usar SCP de remoto a local con la certeza de que tus datos son auténticos y confidenciales.
Transferencia de archivos con SCP: por qué y cómo
Usar SCP de remoto a local, o de local a remoto, es una forma eficiente y flexible de transferir archivos. SCP ofrece ventajas claras frente a otros métodos: por ejemplo, sus medidas de seguridad son más sólidas que las de protocolos como FTP. También destaca en velocidad: SCP suele ser considerablemente más rápido que alternativas como SFTP, lo que lo convierte en una herramienta ideal para la transferencia de archivos entre máquinas Linux.
Con SCP puedes mover archivos:
- De una máquina local a una máquina remota
- De una máquina remota a una máquina local
- De una máquina remota a otra máquina remota.
Ahora veamos cómo usar la sintaxis de SCP en Linux para transferir archivos. El primer paso es configurar SSH en ambos equipos. Dicho esto, SSH suele venir instalado por defecto en las máquinas Linux, así que si ya está disponible en tu caso, puedes saltarte estos pasos.
1. Configuración de SSH
Ejecuta el siguiente comando para instalar SSH:
sudo apt install openssh-client
2. Generación de claves SSH
A continuación, el dispositivo cliente debe establecer una conexión SSH. Para crear una conexión segura entre el cliente y el servidor se necesita un par de claves: una clave privada y una pública. Este comando genera un par de claves SSH:
ssh-keygen
Al ejecutar este comando, es probable que el sistema te pida un nombre para el par de claves y una contraseña (este último campo es opcional). Una vez generado el par de claves, debes copiar la clave pública a la máquina servidor.
Veamos ahora la forma general del comando SCP:
scp [options] [source username@IP]:/[directory/file name] [destination username@IP]:/[directory]
- [options] > Este primer campo se reemplaza con las distintas opciones del comando SCP, que veremos más adelante.
- [source username@IP] > Este campo debe reemplazarse con el nombre de usuario y la dirección IP de la máquina local. Por ejemplo: [email protected]
- [directory/file name] > Este campo debe reemplazarse con la ruta del archivo que quieres enviar.
- [destination username@IP] > Este campo debe reemplazarse con el nombre de usuario y la dirección IP de la máquina de destino.
- [directory] > Reemplaza este campo con la ruta de destino del archivo en la máquina remota.
Ya conoces la estructura general del comando. Ahora repasemos todas las opciones útiles del comando SCP:
| Opción | Caso de uso |
| -C |
Con esta opción, SCP comprime los archivos durante la transferencia.
|
| -c <cipher> |
Con esta opción puedes indicarle a SCP qué cifrado utilizar. Por ejemplo: scp -c <aes128-ctr>.
|
| -v |
Esta opción muestra el progreso del proceso paso a paso.
|
| -l <limit in kilobytes> |
Esta opción permite establecer un límite de ancho de banda máximo. Por ejemplo, el siguiente comando limita la transferencia a 100 kb por segundo: scp -l 100
|
| -P |
Con esta opción puedes cambiar el puerto SSH del servidor remoto al que quieres conectarte. SCP usa el puerto 22 de forma predeterminada.
|
| -S <nombre del programa> |
Usa esta opción para elegir el programa de conexión.
|
| -r |
Copia un archivo o directorio completo de forma recursiva.
|
Transferencia de archivos con SCP
Recordarás que existen tres tipos de transferencias con SCP, ¿verdad? Ahora vamos a explorar cada una por separado. Pero primero, definamos el escenario. Tengo esta foto de un gato en el escritorio de mi equipo Linux y, en el primer paso, quiero transferirla a un servidor remoto Linux. Después la devolveré a mi equipo local. Y por último, el afortunado gato viajará entre dos máquinas remotas.

SCP de local a remoto
Este comando transfiere un archivo desde tu equipo local a un servidor remoto:
scp [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
Para usar el comando scp con contraseña, introduce la contraseña de tu servidor remoto. Con eso es suficiente.

SCP de remoto a local
Para invertir el proceso no necesitas acceder al terminal de tu servidor remoto. Desde el terminal de tu equipo local, escribe este comando:
scp [username]@[IP address of the remote machine]:[path/to/the/file] [path/to/the/location]
Como puedes ver, simplemente hemos intercambiado las dos partes del comando.

SCP entre dos máquinas remotas
Ahora transfiramos el gato entre dos máquinas remotas. Este paso requiere la contraseña de ambas máquinas, así que asegúrate de tenerlas a mano. Usa este comando para transferir un archivo entre dos equipos remotos:
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]

Otros comandos SCP habituales
Los usos más habituales de SCP son: copiar de remoto a local, de local a remoto y entre dos hosts remotos. Pero no nos detengamos ahí: veamos otros ejemplos útiles de Linux con scp.
1. Copiar un directorio completo de forma recursiva
Imagina que quieres transferir un directorio completo con todos sus archivos. Hacerlo uno a uno llevaría mucho tiempo. En su lugar, puedes usar el comando scp con múltiples archivos para copiar un directorio de forma recursiva:
scp -r [Path/to/directory] [username of the remote server]@[Ip address]:/[path/to/the/location]
Esto resulta útil en muchos casos:
- Despliegue de código: al desplegar código o aplicaciones web, puede que necesites transferir un directorio completo con todos sus componentes, como archivos y scripts.
- Copia de seguridad y sincronización: si quieres hacer una copia de seguridad de un directorio completo o sincronizar dos directorios entre el equipo local y el servidor remoto, necesitas copiarlo todo de forma recursiva.
- Migración de sistemas: En una migración de sistemas es fundamental copiar y transferir cada fragmento de información relevante. Usar el comando SCP con la opción -r garantiza que no se pierda nada durante el proceso.
2. Limitar el uso de ancho de banda
Si quieres controlar la velocidad a la que se transfieren tus datos, usa el siguiente comando:
scp -l <limit> [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
¿Por qué harías eso?
En estos dos escenarios, puedes usar la sintaxis Linux scp para establecer un límite de ancho de banda:
- Congestión de red: Si tu red está muy congestionada, limitar el ancho de banda con scp puede ayudar a distribuir los recursos de red de forma más equilibrada. Esto garantiza que otras tareas que dependen de la red funcionen sin problemas. Es especialmente importante cuando transfieres archivos en una red compartida, ya que tu proceso puede interferir con la actividad de otros usuarios.
- Transferencias en segundo plano: Durante transferencias SCP en segundo plano, como copias de seguridad automatizadas o procesos de sincronización, existe el riesgo de que consuman todos los recursos de red disponibles. En ese caso, puedes limitar el ancho de banda de estos procesos para gestionar mejor los recursos.
3. Obtener un registro detallado
Usar la opción -v con SCP genera un registro detallado con información adicional sobre el proceso de transferencia. Ejecuta el siguiente comando para obtener diagnósticos completos:
scp -v [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
Por qué conviene recordar y usar este comando:
- Resolución de problemas: Esta opción muestra el progreso de la transferencia en tiempo real: el tamaño del archivo, el porcentaje completado, mensajes de error y advertencias. Combinar todos estos datos te permite monitorear y diagnosticar el proceso de transferencia cuando sea necesario.
4. Especificar un puerto SSH
La sintaxis Linux scp con la opción -P te permite cambiar el puerto SSH. Este es el comando para hacerlo:
scp -P [port number] [path/to/the/file] [Username]@[IP address]:[path/to/the/location]
Esto puede ser útil para:
- Configuración del firewall: Si el puerto SSH predeterminado está bloqueado, o si quieres ocultar el servicio SSH de posibles amenazas, puedes cambiar el puerto SSH.
¿Existen alternativas a SCP?
SCP es rápido y seguro. Con la sintaxis Linux scp correcta y algo de conocimiento para solucionar problemas, puede ser la única herramienta que necesites. Aun así, no está de más conocer sus alternativas.
1. rsync
rsync es una herramienta de transferencia de archivos muy completa: ofrece sincronización avanzada, transferencias incrementales y copia tanto local como remota. Reduce el uso de ancho de banda transfiriendo solo las diferencias entre el origen y el destino. Además, una gran ventaja de rsync es que puede reanudar transferencias interrumpidas desde el punto en que se detuvieron.
Ventajas de rsync
- Sincronización eficiente de archivos y directorios.
- Implementa el algoritmo de transferencia delta, lo que reduce la cantidad de datos transmitidos.
- Puede reanudar transferencias interrumpidas.
Desventajas de rsync
- Requiere que rsync esté instalado tanto en el sistema de origen como en el de destino.
- Necesita más configuración y opciones de comando que scp.
2. SFTP (Protocolo de transferencia de archivos SSH)
SFTP ofrece una forma segura de transferir archivos a través de SSH. Funciona de manera similar a FTP, pero opera sobre una conexión SSH cifrada, igual que SCP. Sin embargo, en algunos aspectos SFTP supera a SCP: SCP no puede listar directorios, crearlos ni eliminarlos, entre otras limitaciones. SFTP, en cambio, sí puede realizar todas estas operaciones.
Ventajas de SFTP
- Transferencia de archivos segura con cifrado.
- Gestión remota de archivos.
- Disponible en la mayoría de sistemas Linux y Unix.
Desventajas de SFTP
- La sintaxis y el uso difieren del FTP tradicional.
- Es posible que no esté disponible en ciertos sistemas embebidos o dispositivos.
3. FTP (Protocolo de Transferencia de Archivos)
FTP es un protocolo estándar ampliamente utilizado para la transferencia de archivos. Funciona con un modelo cliente-servidor y ofrece funcionalidad básica de transferencia de archivos.
Ventajas de FTP
- Compatible con una amplia variedad de plataformas.
- Existen clientes de línea de comandos y gráficos bien conocidos.
Desventajas de FTP
- No incluye cifrado, por lo que es menos seguro que scp y sftp.
- Puede requerir configuración adicional del firewall para establecer conexiones.
- Autenticación en texto plano.
En definitiva, aunque scp es una opción sencilla y fiable para la transferencia segura de archivos mediante SSH, alternativas como rsync, sftp y FTP pueden ofrecer funciones y flexibilidad adicionales según los requisitos concretos.
¿Cómo elegir entre ellos? Debes tener en cuenta factores como la seguridad, las necesidades de sincronización, la facilidad de uso y la compatibilidad con tus sistemas y protocolos. Por ejemplo, si la seguridad y la confidencialidad de los datos son lo más importante en tu transferencia de archivos, FTP no es una buena opción.
Conclusión
SCP es una herramienta rápida y segura para transferir archivos entre equipos. Puedes usar scp de remoto a local, de local a remoto e incluso entre dos sistemas remotos. Aunque existen alternativas como rsync que hacen un trabajo aceptable, SCP las supera en muchos aspectos, especialmente en seguridad y velocidad. En este artículo hablamos de SCP, sus casos de uso y sus alternativas, y también incluimos una hoja de referencia rápida con la sintaxis más utilizada.
Preguntas frecuentes
¿Hay algún riesgo de seguridad que deba tener en cuenta al usar SCP de remoto a local?
SCP es una herramienta bastante segura y no necesitas preocuparte por amenazas de seguridad al usarla. Aun así, siempre es recomendable aplicar cualquier medida de seguridad adicional que tengas a tu disposición.
¿Cuáles son los errores más comunes al usar SCP de remoto a local?
Al usar SCP para transferir archivos de un servidor remoto a un equipo local, es posible encontrar algunos errores frecuentes. Estos son los dos más comunes al usar SCP de remoto a local:
- No such file or directory: este error ocurre cuando el número de puerto no es correcto, los permisos del archivo son incorrectos o los datos de inicio de sesión no son válidos.
- Host Key Verification Failed: este error aparece cuando la clave del host ha cambiado, por ejemplo tras una actualización del servidor. La clave del host indica que ya te habías conectado a ese servidor antes; cuando la verificación falla, significa que la identidad del servidor ha cambiado. Este error te protege de conectarte a un servidor fraudulento.
¿Cómo uso SCP para transferir archivos entre sistemas remotos?
Para transferir archivos entre sistemas con SCP, ambos equipos deben ser accesibles mediante SSH. También necesitas la dirección IP y la contraseña de los equipos remotos. A partir de ahí, basta con usar el comando SCP correcto:
scp [username of the 1st remote machine]@[IP address of the 1st remote machine]:[path/to/the/file] [username of the 2nd remote machine]@[IP address of the 2nd remote machine]:/[path/to/location]
Tras introducir este comando, se te pedirá la contraseña de los servidores. Una vez proporcionada, el archivo se transferirá.