SCP está estrechamente relacionado con el protocolo SSH y, de hecho, nació de la misma idea.

SCP se asegura de que los datos permanezcan confidenciales y sin manipular durante el tránsito como una extensión del protocolo SSH.

En primer lugar, vamos a entender cómo funciona este SCP, y luego veremos los comandos scp.

¿Qué es SCP?

A computer with two Secure Copy Protocol monitors and a globe on it.

SCP significa Protocolo de Copia Segura.

Es un método seguro y eficiente para copiar archivos y directorios entre hosts locales y remotos o entre dos hosts remotos.

Es ampliamente utilizado para transferir datos de forma segura a través de una red. SCP se basa en SSH (Secure Shell) para establecer una conexión segura y cifrar los datos durante el tránsito.

Tanto si necesita mover un único archivo como un directorio completo, SCP proporciona una solución fiable para las transferencias remotas de archivos.

¿Cómo funciona SCP?

Two laptops use Secure Copy Protocol to transfer folders between them.

SCP está construido sobre el protocolo SSH, que es un protocolo de red criptográfico para el inicio de sesión remoto seguro y la ejecución de comandos. Utiliza los mismos mecanismos de seguridad que SSH, incluidos el cifrado y la autenticación, para proteger los datos durante la transmisión.

Al utilizar SCP, un usuario inicia un comando de copia en su máquina local que especifica el archivo de origen y la ubicación de destino en una máquina remota. SCP establece una conexión SSH con el sistema remoto y, a continuación, copia de forma segura los archivos del origen al destino.

¿Cuándo utilizar SCP?

A computer with a secure file transfer protocol (SFTP) and a gear on it.

SCP es particularmente útil en los siguientes escenarios.

Copia de seguridad de servidores remotos

SCP le permite realizar copias de seguridad de archivos de un servidor remoto a su máquina local o viceversa, lo que garantiza la redundancia de datos y la recuperación en caso de desastre.

Despliegue de aplicaciones

También simplifica el proceso copiando de forma segura los archivos necesarios en cada sistema de destino cuando se despliegan aplicaciones en varios servidores,

Transferencia de archivos de gran tamaño

SCP ofrece un método alternativo fiable y seguro de transmisión de datos para archivos de gran tamaño que podrían ser demasiado grandes para enviarlos como adjuntos de correo electrónico.

Compartir archivos de forma segura

SCP se asegura de que los datos se mantengan encriptados durante todo el tránsito mientras se envían archivos confidenciales a otras personas.

Colaboración remota

SCP puede utilizarse para compartir archivos de forma segura con colaboradores o miembros de un equipo que se encuentren en distintas ubicaciones.

Sintaxis del comando SCP

Antes de empezar a ver cómo utilizar el comando SCP, empecemos por comprender la sintaxis básica.

La sintaxis del comando SCP tiene el siguiente aspecto:

scp [opciones] [origen] [destino]

Explicación de la sintaxis

Opciones

Son banderas opcionales que modifican el comportamiento del comando SCP. Puede utilizar varias opciones para personalizar el proceso de transferencia. He aquí algunas opciones comunes:

-r: Copia recursivamente los directorios y su contenido.
-p: Conserva los permisos, marcas de tiempo y modos del archivo original.
P: Especifica el número de puerto para la conexión SSH.
i: Especifica el archivo de clave privada para la autenticación SSH.
-C: Utiliza la compresión para acelerar la transferencia de datos.
-l: Limita el ancho de banda utilizado para la transferencia (en Kbit/s).
-v: Modo verboso: muestra mensajes de depuración durante la transferencia.
-o: Pasa una opción al cliente SSH. Puede utilizarse para desactivar la comprobación estricta de la clave del host.

Fuente

La fuente especifica el archivo o directorio que desea copiar. Puede ser una ruta local o una ruta remota, dependiendo del contexto.

Destino

El destino especifica dónde quiere copiar el origen. Al igual que el origen, también puede ser una ruta local o una ruta remota.

Ejemplos de comandos

#1. Copiar un archivo del servidor local al remoto

scp /ruta/a/local/fichero.txt usuario@remotehost:/ruta/a/destino/

/ruta/a/local/archivo.txt: Este es el archivo fuente que desea copiar desde su máquina local.

user@remotehost: Sustituya el usuario por el nombre del usuario remoto y el host remoto por el nombre de host o la dirección IP del servidor remoto.

/ruta/a/destino/: Esta es la ruta de destino en el servidor remoto donde se copiará el archivo.

Ejemplo: En mi caso, he elegido un servidor remoto para transferir el archivo.

Nombre de usuario del host remoto – abhishekvarma

Dirección del host remoto – 192.168.29.70

scp /home/vboxuser/Desktop/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Mientras se conecta a una máquina remota, le pide la contraseña. Aquí he seleccionado un archivo zip para copiar.

Salida

Ubuntu command line - secure copy protocol for transferring files.

Y la salida tendrá este aspecto si no hay ningún error en la conexión a un servidor remoto.

muestra.zip 100% 20KB 717.9KB/s 00:00

#2. Copiar un archivo de la máquina remota a la local

scp user@remotehost:/path/to/remote/file.txt /ruta/a/local/destino/

Igual que el anterior, sustituya el usuario y la dirección del host remoto.

Ejemplo

scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Escritorio

Salida

A screenshot of a computer screen displaying the Secure Copy Protocol.

Esta es la salida de muestra en mi caso. La marca de tiempo varía en función de la velocidad de conexión.

muestra.zip 100% 20KB 51.2KB/s 00:00

#3. Copiar un directorio de forma recursiva

scp user@remotehost:/path/to/remote/file.txt /ruta/a/local/destino/

En este caso, el indicador ‘-r’ indica a SCP que copie los directorios de forma recursiva (incluidos los subdirectorios y su contenido).

Ejemplo

scp -r /home/vboxuser/Escritorio abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Aquí se menciona todo el directorio para copiar los archivos.

Salida

A screenshot of a file transferred securely using the Secure Copy Protocol (SCP) displayed on a computer screen.
sample.zip 100% 20KB 1.0MB/s 00:00
Captura de pantalla de 2023-08-13 21-45-23.png 100% 27KB 1.5MB/s 00:00
.swp 100% 12KB 894,2KB/s 00:00
.help.swp 100% 12KB 780.4KB/s 00:00

#4. Copiar archivos que coincidan con un patrón

scp /ruta/a/local/*.txt usuario@remotehost:/ruta/a/destino/

*. txt – Se trata de un patrón comodín que coincide con todos los archivos con extensión .txt del directorio local especificado. Las rutas de origen y destino son las mismas que antes.

Ejemplo

scp /home/vboxuser/Desktop/carpeta/*.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu ssh client - screenshot thumbnail with Secure Copy Protocol support.

Aquí he probado con una extensión .png.

Captura de pantalla de 2023-08-13 21-45-23.png 100% 27KB 1.4MB/s 00:00
Captura de pantalla de 2023-08-13 21-55-28.png 100% 24KB 1.7MB/s 00:00
Captura de pantalla de 2023-08-13 22-04-03.png 100% 38KB 2.1MB/s 00:00

#5. Conservar los atributos de los archivos

scp -p /ruta/a/local/fichero.txt usuario@remotehost:/ruta/a/destino/

Aquí la bandera ‘-p’ preserva los tiempos de modificación, tiempos de acceso y modos del archivo fuente cuando se copia.

Ejemplo

scp -p /home/vboxusuario/escritorio/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu terminal - screenshot thumbnail with Secure Copy Protocol integration.
muestra.zip 100% 20KB 420.0KB/s 00:00

#6. Especifique un puerto SSH diferente

scp -P 22 /ruta/a/local/archivo.txt usuario@remotehost:/ruta/a/destino/

La bandera ‘-P’ especifica un puerto SSH diferente (22 en este caso) para la conexión SCP. Puede utilizar cualquier puerto que desee.

Ejemplo

scp -P 22 /home/vboxuser/Desktop/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

A screenshot of a secure copy protocol transfer in an Ubuntu terminal.
muestra.zip 100% 20KB 1.2MB/s 00:00

#7. Copia con compresión

scp -C /ruta/a/local/archivo.txt usuario@remotehost:/ruta/a/destino/

Esta bandera ‘-C’ activa la compresión durante la transferencia, reduciendo potencialmente el tamaño de los datos transferidos. Las direcciones de origen y destino son las mismas que las explicadas anteriormente.

Ejemplo

scp -C /home/vboxusuario/escritorio/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

A screenshot of a computer screen displaying a file transfer using Secure Copy Protocol.
muestra.zip 100% 20KB 985.8KB/s 00:00

#8. Salida verbosas para depuración

scp -v /ruta/a/local/archivo.txt usuario@remotehost:/ruta/a/destino/

La opción ‘-v’ activa la salida verbosa, que proporciona información más detallada durante el proceso de transferencia.

Ejemplo

scp -v /home/vboxusuario/escritorio/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu terminal - Secure Copy Protocol.

La salida de ejemplo tendrá el siguiente aspecto

Ejecutando: programa /usr/bin/ssh host 192.168.29.70, usuario abhishekvarma, comando scp -v -t /Usuarios/abhishekvarma/Escritorio OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Lectura de los datos de configuración /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config línea 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config línea 21: Aplicando opciones para *
debug1: Conectando a 192.168.29.70 [192.168.29.70] puerto 22. debug1: Conexión establecida.
debug1: archivo de identidad /root/.ssh/id_rsa tipo -1
debug1: archivo de identidad /root/.ssh/id_rsa-cert tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa-cert tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa_sk tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa_sk-cert tipo -1

#9. Copiar de remoto a local con salida Verbose

scp -v user@remotehost:/path/to/remote/file.txt /ruta/a/local/destino/

Las mismas explicaciones que en el ejemplo verboso anterior, con los papeles de las ubicaciones local y remota invertidos.

Ejemplo

scp -v abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Escritorio

Salida

A screenshot demonstrating the Secure Copy Protocol implemented in a python script on a pc.

La salida tendrá el siguiente aspecto

Ejecutando: programa /usr/bin/ssh host 192.168.29.70, usuario abhishekvarma, comando scp -v -f /Usuarios/abhishekvarma/Desktop/muestra.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: /etc/ssh/ssh_config línea 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: Lectura de los datos de configuración /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config línea 21: Aplicando opciones para *
debug1: Conectando a 192.168.29.70 [192.168.29.70] puerto 22. debug1: Conexión establecida.
debug1: archivo de identidad /root/.ssh/id_rsa tipo -1
debug1: archivo de identidad /root/.ssh/id_rsa-cert tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa-cert tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa_sk tipo -1 debug1: archivo de identidad /root/.ssh/id_ecdsa_sk-cert tipo -1

#10. Copia utilizando una clave SSH diferente


scp -i /ruta/a/clave_privada.pem /ruta/a/local/archivo.txt usuario@remotehost:/ruta/a/destino/

Esta bandera «-i /ruta/a/clave_privada.pem» especifica una clave privada SSH diferente para la autenticación.

Ejemplo

scp -i /ruta/a/clave_privada.pem /home/vboxuser/Desktop/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu terminal - screenshot thumbnail featuring Secure Copy Protocol.

Si tiene una clave privada, entonces puede utilizarla o bien puede utilizar la que viene por defecto.

sample.zip 100% 20KB 1.1MB/s 00:00

#11. Copiar varios archivos al servidor remoto

scp archivo1.txt archivo2.txt usuario@remotehost:/ruta/a/destino/

Este comando copia archivo1.txt y archivo2.txt del directorio local al destino especificado en el servidor remoto.

Ejemplo

scp /home/vboxuser/Escritorio/imagen.png /home/vboxuser/Escritorio/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop 

Salida

Ubuntu terminal - screenshot thumbnail with Secure Copy Protocol.
imagen.png 100% 39KB 1.4MB/s 00:00
muestra.zip 100% 20KB 1.5MB/s 00:00

#12. Copiar un archivo remoto con un nombre diferente

scp user@remotehost:/path/to/remote/file.txt /ruta/a/local/nombrearchivo.txt

Este comando copia archivo.txt del servidor remoto al directorio local, renombrándolo como nombrenuevoarchivo.txt en el proceso.

Ejemplo

scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxusuario/escritorio/nuevoarchivo.txt

Salida

A secure screenshot of a python program on a phone utilizing the Secure Copy Protocol.

Las extensiones de los archivos antiguos y nuevos deben ser las mismas al ejecutar este comando.

ejemplo.zip 100% 20KB 28.7KB/s 00:00

#13. Copia con límite de ancho de banda específico

scp -l 1000 /ruta/a/local/archivo.txt usuario@remotehost:/ruta/a/destino/

Esta bandera ‘-l’ especifica un límite de ancho de banda en Kbps (1000 Kbps en este caso) para la transferencia.

Ejemplo

scp -l 300 /home/vboxusuario/escritorio/muestra.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu terminal - screenshot thumbnail using Secure Copy Protocol for file transfer.
muestra.zip 100% 20KB 31.3KB/s 00:00
scp -rp /ruta/a/local/fuente/ usuario@remotehost:/ruta/a/destino/

La bandera ‘-p’ preserva los atributos de los archivos y la bandera -r copia recursivamente los directorios. Este comando también preserva los enlaces simbólicos durante la copia.

Ejemplo

scp -rp /home/vboxuser/Escritorio/imagen.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

Ubuntu terminal - screenshot thumbnail for Secure Copy Protocol.
imagen.png 100% 39KB 1.8MB/s 00:00

#15. Copiar archivos de forma detallada con compresión

scp -vC /ruta/a/local/fichero.txt usuario@remotehost:/ruta/a/destino/

Este comando combina la salida verbosa (-v) y la compresión (-C) durante la transferencia de archivos.

Ejemplo

scp -vC /home/vboxusuario/escritorio/imagen.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

A screenshot of a computer screen displaying a Secure Copy Protocol (SCP) session with a list of files.

La salida tendrá el siguiente aspecto

scp: debug1: fd 3 despejando O_NONBLOCK
Enviando modos de archivo: C0664 40050 imagen.png
Hundimiento: C0664 40050 imagen.png
image.png
d 6 borrando O_NONBLOCK
scp: debug1: fd - borrando O_NONBLOCK
imagen.png
debug1: client_input_channel_req: channel type exit-status reply debug1: channel 0: free: client-session, channels 1
Transferidos: enviados 40220, recibidos 2576 bytes, en 0,1 segundos
Bytes por segundo: enviados 352570.0, recibidos 22581.3
root@ubuntu: ~
debug1: estado de salida 0
debug1: comprimir salientes: datos brutos 40287, comprimidos 38198, factor 0.95 debug1: comprimir entrantes: datos brutos 792, comprimidos 757, factor 0.96 

#16. Copia entre dos servidores remotos

Si desea transferir archivos de un servidor remoto a otro, puede utilizar este comando.

scp user1@remotehost1:/path/to/remote/file.txt usuario2@remotehost2:/ruta/a/destino/

Este comando transfiere directamente archivo.txt del remotehost1 al remotehost2.

Ejemplo

scp user1@remotehost1:/path/to/remote/file.txt abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop

Salida

archivo.txt 100% 512KB 512.0KB/s 00:00

Si se produce algún error o problema durante la transferencia, la salida puede mostrar mensajes de error que proporcionen información sobre lo que ha ido mal.

ssh: conectar con host fuente.ejemplo.com puerto 22: Conexión denegada
conexión perdida

En este caso, el mensaje de error sugiere que se rechazó la conexión SSH con el servidor de origen. Podría deberse a varias razones, como un nombre de host, una dirección IP o un puerto incorrectos, o a problemas con la configuración de SSH.

Preguntas frecuentes sobre SCP

He aquí algunas preguntas frecuentes relacionadas con el protocolo SCP, junto con sus respuestas.

¿En qué se diferencia SCP de FTP o SFTP?

FTP son las siglas de File Transfer Protocol (protocolo de transferencia de archivos).

SFTP son las siglas de File Transfer Protocol (protocolo de transferencia de archivos). Ambos se utilizan para transferir archivos.

SCP funciona sobre SSH y ofrece tanto encriptación como autenticación en un único protocolo, lo que lo hace más seguro y eficaz.

¿Cuándo debo utilizar SCP?

SCP es el más adecuado para escenarios en los que se requieren transferencias de archivos seguras y fiables, como copias de seguridad remotas, despliegue de software, distribución de archivos de configuración y colaboración entre miembros de un equipo.

¿Es SCP compatible con direcciones IPv6?

Sí, SCP es compatible tanto con direcciones IPv4 como IPv6, lo que le permite transferir archivos a través de redes que utilicen cualquier esquema de direccionamiento.

Conclusion✍️

Espero que este artículo le haya resultado útil para conocer SCP y su funcionamiento.

Puede que también le interese conocer los Comandos Linux para Administrador de Sistemas