Copiar carpetas por SSH (scp y rsync)
¿Por qué copiar carpetas por SSH?
Sección titulada “¿Por qué copiar carpetas por SSH?"Cuando trabajas con servidores remotos (especialmente en la nube o VPS), es habitual necesitar:
- Subir el código de una aplicación al servidor
- Descargar logs o backups a tu máquina local
- Sincronizar configuraciones entre entornos
SSH no solo sirve para conectarse; también incluye herramientas para transferir archivos de forma segura.
Herramientas principales
Sección titulada “Herramientas principales"| Herramienta | Ventaja | Cuándo usarla |
|---|---|---|
scp | Simple, viene por defecto en todos los sistemas | Copias puntuales, archivos pequeños |
rsync | Reanuda transferencias, sincroniza solo cambios | Copias grandes, backups, sincronización periódica |
1. Usando scp (Secure Copy)
Sección titulada “1. Usando scp (Secure Copy)"Sintaxis básica
Sección titulada “Sintaxis básica"scp -r carpeta/origen usuario@servidor:/ruta/destino-r: recursivo (necesario para carpetas)-P: puerto SSH personalizado (si no es el 22)
Ejemplo 1: Subir carpeta local al servidor
Sección titulada “Ejemplo 1: Subir carpeta local al servidor"# Desde tu máquina localscp -r ~/mi-proyecto alumno@192.168.1.100:/home/alumno/Ejemplo 2: Descargar carpeta del servidor a local
Sección titulada “Ejemplo 2: Descargar carpeta del servidor a local"# Desde tu máquina localscp -r alumno@192.168.1.100:/var/log/nginx ~/backups/Ejemplo 3: Puerto SSH no estándar (ej: 2222)
Sección titulada “Ejemplo 3: Puerto SSH no estándar (ej: 2222)"scp -P 2222 -r ~/datos/ alumno@servidor.com:~/backups/2. Usando rsync (más potente)
Sección titulada “2. Usando rsync (más potente)"Sintaxis básica
Sección titulada “Sintaxis básica"rsync -avz carpeta/origen usuario@servidor:/ruta/destino| Opción | Significado |
|---|---|
-a | Modo archivo (preserva permisos, fechas, enlaces simbólicos) |
-v | Verboso (muestra lo que copia) |
-z | Comprime durante la transferencia |
-P | Muestra progreso y permite reanudar |
—delete | Borra en destino lo que no existe en origen |
Ejemplo 1: Subir carpeta con progreso
Sección titulada “Ejemplo 1: Subir carpeta con progreso"rsync -avzP ~/mi-proyecto/ alumno@servidor:~/mi-proyecto/Ejemplo 2: Sincronizar bidireccionalmente (solo cambios)
Sección titulada “Ejemplo 2: Sincronizar bidireccionalmente (solo cambios)"La segunda vez que ejecutes el mismo comando, rsync solo copiará los archivos modificados.
rsync -avz ~/proyecto/ usuario@servidor:~/proyecto/Ejemplo 3: Descargar carpeta completa
Sección titulada “Ejemplo 3: Descargar carpeta completa"rsync -avzP alumno@servidor:/var/log/ ~/logs-servidor/Ejemplo 4: Sincronizar eliminando archivos huérfanos
Sección titulada “Ejemplo 4: Sincronizar eliminando archivos huérfanos"rsync -avz --delete ~/local/ usuario@servidor:/remoto/3. Comparativa rápida
Sección titulada “3. Comparativa rápida"| Característica | scp | rsync |
|---|---|---|
| Velocidad 1ª vez | Buena | Buena |
| Velocidad 2ª vez | Igual (copia todo) | Muy rápida (solo cambios) |
| Reanudar transferencia | ❌ No | ✅ Sí (con -P) |
| Mostrar progreso | ❌ Solo con -v | ✅ Con -P |
| Comprobar integridad | ❌ No | ✅ Sí |
| Disponibilidad por defecto | ✅ Siempre | ⚠️ A veces hay que instalarlo |
4. Instalar rsync si no lo tienes
Sección titulada “4. Instalar rsync si no lo tienes"sudo apt install rsyncsudo pacman -S rsyncbrew install rsyncsudo apt install rsync5. Ejemplos prácticos para el LFCS
Sección titulada “5. Ejemplos prácticos para el LFCS"Subir una web completa al servidor
Sección titulada “Subir una web completa al servidor"rsync -avz --delete ~/mi-web/ alumno@servidor:/var/www/html/Descargar logs de acceso para analizar localmente
Sección titulada “Descargar logs de acceso para analizar localmente"scp -r alumno@servidor:/var/log/nginx/ ~/analisis-logs/Hacer backup semanal de configuración
Sección titulada “Hacer backup semanal de configuración"rsync -avz /etc/ alumno@backup-server:/backups/etc-fecha/Copiar desde un servidor con autenticación por clave
Sección titulada “Copiar desde un servidor con autenticación por clave"# Primero configurar clave SSH (ver práctica 1, paso 4)scp -i ~/.ssh/mi-clave-privada -r carpeta/ usuario@servidor:/destino/6. Solución de problemas comunes
Sección titulada “6. Solución de problemas comunes"| Problema | Solución |
|---|---|
Permission denied (publickey) | Configura autenticación por clave SSH (práctica 1 paso 4) |
Connection refused | El servidor no tiene SSH corriendo o el puerto está bloqueado |
No such file or directory | Revisa las rutas: las rutas remotas son del servidor, no locales |
| La carpeta remota está vacía | Comprueba la barra final / en el origen |
| Transferencia muy lenta | Usa rsync -z para comprimir o reduce archivos grandes |
7. Bonus: copiar una carpeta manteniendo permisos
Sección titulada “7. Bonus: copiar una carpeta manteniendo permisos"# Con rsync (recomendado)rsync -avz --chown=usuario:grupo carpeta/ usuario@servidor:/destino/
# Con scp (no preserva permisos igual que rsync)scp -rp carpeta/ usuario@servidor:/destino/Resumen de comandos
Sección titulada “Resumen de comandos"# Subir carpeta con scpscp -r local/carpeta usuario@servidor:/remota/
# Subir carpeta con rsync (recomendado)rsync -avzP local/carpeta/ usuario@servidor:/remota/
# Descargar carpeta del servidorrsync -avzP usuario@servidor:/remota/carpeta/ local/
# Sincronización bidireccional (sube solo cambios)rsync -avzP local/ usuario@servidor:/remota/