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?
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?
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?
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
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
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
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
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
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
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
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
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
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
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
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
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
muestra.zip 100% 20KB 31.3KB/s 00:00
#14. Copia de archivos y conservación de enlaces simbólicos
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
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
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.
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.
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.
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