Ir al contenido

Copiar carpetas por SSH (scp y rsync)

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.


HerramientaVentajaCuándo usarla
scpSimple, viene por defecto en todos los sistemasCopias puntuales, archivos pequeños
rsyncReanuda transferencias, sincroniza solo cambiosCopias grandes, backups, sincronización periódica

ventana terminal
scp -r carpeta/origen usuario@servidor:/ruta/destino
  • -r : recursivo (necesario para carpetas)
  • -P : puerto SSH personalizado (si no es el 22)
ventana terminal
# Desde tu máquina local
scp -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"
ventana terminal
# Desde tu máquina local
scp -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)"
ventana terminal
scp -P 2222 -r ~/datos/ alumno@servidor.com:~/backups/

ventana terminal
rsync -avz carpeta/origen usuario@servidor:/ruta/destino
OpciónSignificado
-aModo archivo (preserva permisos, fechas, enlaces simbólicos)
-vVerboso (muestra lo que copia)
-zComprime durante la transferencia
-PMuestra progreso y permite reanudar
—deleteBorra en destino lo que no existe en origen
ventana terminal
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.

ventana terminal
rsync -avz ~/proyecto/ usuario@servidor:~/proyecto/
ventana terminal
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"
ventana terminal
rsync -avz --delete ~/local/ usuario@servidor:/remoto/

Característicascprsync
Velocidad 1ª vezBuenaBuena
Velocidad 2ª vezIgual (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

ventana terminal
sudo apt install rsync

ventana terminal
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"
ventana terminal
scp -r alumno@servidor:/var/log/nginx/ ~/analisis-logs/
ventana terminal
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"
ventana terminal
# Primero configurar clave SSH (ver práctica 1, paso 4)
scp -i ~/.ssh/mi-clave-privada -r carpeta/ usuario@servidor:/destino/

ProblemaSolución
Permission denied (publickey)Configura autenticación por clave SSH (práctica 1 paso 4)
Connection refusedEl servidor no tiene SSH corriendo o el puerto está bloqueado
No such file or directoryRevisa las rutas: las rutas remotas son del servidor, no locales
La carpeta remota está vacíaComprueba la barra final / en el origen
Transferencia muy lentaUsa 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"
ventana terminal
# 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/

ventana terminal
# Subir carpeta con scp
scp -r local/carpeta usuario@servidor:/remota/
# Subir carpeta con rsync (recomendado)
rsync -avzP local/carpeta/ usuario@servidor:/remota/
# Descargar carpeta del servidor
rsync -avzP usuario@servidor:/remota/carpeta/ local/
# Sincronización bidireccional (sube solo cambios)
rsync -avzP local/ usuario@servidor:/remota/