15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
09.10.2024

Cómo Subir Archivos con FTP: Una Guía Técnica Completa

El Protocolo de Transferencia de Archivos (FTP) es un protocolo de red que opera bajo un modelo cliente-servidor que permite la transferencia bidireccional de archivos entre una máquina local y un host remoto a través de TCP/IP. Utiliza dos canales separados — un canal de control (puerto 21) para comandos y un canal de datos (puerto 20 o un puerto efímero negociado) para las cargas útiles de archivos reales, lo cual es un detalle arquitectónico fundamental que explica la mayoría de los problemas de firewall y modo pasivo que encuentran los profesionales.

Para cualquier persona que gestione un servidor web, despliegue código de aplicaciones o administre un entorno de VPS Hosting, dominar FTP y sus sucesores seguros es imprescindible. Esta guía cubre el flujo de trabajo completo: selección de protocolo, configuración del cliente, navegación de directorios, transferencias por lotes, gestión de permisos y resolución de problemas a nivel de producción, incluyendo casos extremos que los tutoriales genéricos omiten.

Comprensión de la Arquitectura FTP y las Variantes de Protocolo

Antes de tocar un cliente, comprender qué variante de protocolo estás utilizando realmente previene horas de depuración posteriores.

Modo Activo vs. Modo Pasivo

El diseño de doble canal de FTP crea una división de comportamiento crítica:

  • Modo activo: El servidor inicia la conexión de datos de vuelta al cliente en un puerto que el cliente especifica. Esto casi siempre falla a través de routers NAT o firewalls estrictos porque la conexión entrante desde el servidor es bloqueada.
  • Modo pasivo (PASV): El cliente inicia ambas conexiones. El servidor abre un puerto alto aleatorio y le indica al cliente que se conecte a él. Este es el valor predeterminado correcto para prácticamente cualquier despliegue moderno.

La mayoría de los fallos de conexión en producción se deben al uso del modo activo contra un servidor con firewall, o a un servidor cuyo rango de puertos pasivos no está abierto en sus propias reglas de firewall.

Tabla de Comparación de Protocolos

CaracterísticaFTPFTPS (FTP sobre TLS)SFTP (Transferencia de Archivos SSH)SCP
CifradoNingunoTLS/SSLSSHSSH
Puerto del canal de control2121 (explícito) / 990 (implícito)2222
Canal de datosSeparado (20/efímero)Separado (envuelto en TLS)Canal único multiplexadoCanal único
Compatibilidad con firewallDeficienteDeficienteExcelenteExcelente
Reanudar transferenciasSí (comando REST)No
Listado de directoriosNo
Certificado requeridoNoSí (mínimo del lado del servidor)No (clave o contraseña)No
Recomendado para producciónNoSituacionalSí (copia masiva)

La conclusión práctica: Usa SFTP por defecto. Usa FTPS solo cuando un sistema heredado lo requiera explícitamente. Evita completamente el FTP simple en cualquier servidor orientado a internet — las credenciales y el contenido de los archivos viajan en texto claro y son interceptados trivialmente.

Requisitos Previos y Recopilación de Credenciales

Antes de abrir cualquier cliente, recopila lo siguiente de tu proveedor de hosting o administrador del servidor:

  • Nombre de host o dirección IP — p. ej., ftp.yourdomain.com o 203.0.113.45
  • Protocolo — FTP, FTPS (explícito o implícito), o SFTP
  • Puerto — 21 para FTP/FTPS-explícito, 990 para FTPS-implícito, 22 para SFTP
  • Usuario y contraseña — o una clave privada SSH para autenticación basada en clave SFTP
  • Ruta raíz remota — comúnmente /public_html, /var/www/html, o /home/username/public_html dependiendo del stack del servidor

Si estás trabajando con un VPS con cPanel, tus credenciales FTP se crean en cPanel > Cuentas FTP, donde también puedes limitar cada cuenta a un directorio específico — una práctica de seguridad que limita el radio de impacto si las credenciales se ven comprometidas.

Paso 1: Instalar y Configurar FileZilla

FileZilla sigue siendo el cliente FTP multiplataforma más ampliamente utilizado debido a su compatibilidad con FTP, FTPS y SFTP, su Administrador de Sitios integrado y su cola de transferencias con capacidad de reanudación.

Descarga: Obtén FileZilla Client (no Server) desde filezilla-project.org. Verifica el checksum SHA-512 publicado en la página de descarga antes de ejecutar el instalador — este es un paso que la mayoría de los tutoriales omiten, pero los ataques a la cadena de suministro en utilidades populares están documentados.

Después de la instalación, abre FileZilla y navega a Editar > Configuración > Transferencias > Tipos de archivo. Establece el tipo de transferencia predeterminado en Binario, no en Automático. La detección automática puede corromper silenciosamente archivos binarios (imágenes, archivos comprimidos, ejecutables) al aplicar conversión de fin de línea cuando la heurística clasifica incorrectamente el archivo.

Paso 2: Crear una Entrada en el Administrador de Sitios

Usar la barra de Conexión rápida es aceptable para tareas puntuales, pero almacena las credenciales en texto plano en recentservers.xml. Para cualquier conexión recurrente, usa el Administrador de Sitios en su lugar.

  1. Abre Archivo > Administrador de Sitios (o presiona Ctrl+S).
  2. Haz clic en Nuevo Sitio y dale un nombre descriptivo.
  3. Configura la pestaña General:
  • Protocolo: Selecciona SFTP para servidores basados en SSH, o FTP con TLS explícito para FTPS.
  • Host: Introduce el nombre de host o IP del servidor.
  • Puerto: Déjalo en blanco para usar el puerto predeterminado del protocolo, o especifícalo explícitamente.
  • Tipo de inicio de sesión: Elige Normal para autenticación por contraseña, o Archivo de clave para SFTP basado en clave SSH.
  • Usuario / Contraseña: Introduce las credenciales.
  1. En la pestaña Avanzado, establece el Directorio remoto predeterminado en tu raíz web (p. ej., /public_html) y el Directorio local predeterminado en tu carpeta de proyecto. Esto elimina el tiempo de navegación en cada sesión.
  2. Haz clic en Conectar.

Para SFTP con autenticación basada en clave — el enfoque recomendado para Servidores Dedicados — apunta el campo Archivo de clave a tu clave privada (formato .pem o .ppk). FileZilla usa su propio formato de clave; convierte las claves OpenSSH con PuTTYgen si es necesario.

Paso 3: Navegar por la Interfaz de Doble Panel

Una vez conectado, FileZilla presenta una vista dividida:

  • Panel izquierdo (Sitio local): Tu sistema de archivos local. Navega hasta el directorio que contiene los archivos que deseas subir.
  • Panel derecho (Sitio remoto): El sistema de archivos del servidor. Navega hasta el directorio de destino — típicamente /public_html para contenido web.
  • Paneles de cola inferiores: Muestran las transferencias en cola, las transferencias fallidas y las transferencias exitosas con marcas de tiempo y recuentos de bytes.

El árbol de directorios en la parte superior de cada panel y la lista de archivos debajo son independientes — hacer clic en una carpeta en el árbol no desplaza automáticamente la lista de archivos. Esto confunde a los nuevos usuarios que se preguntan por qué su lista de archivos aparece vacía.

Paso 4: Subir Archivos

Archivo Único o Selección Manual

Haz clic derecho en cualquier archivo en el panel local y selecciona Subir, o arrástralo al panel remoto. Para la selección de múltiples archivos, usa Ctrl+Click (Windows/Linux) o Cmd+Click (macOS) para selección no contigua, o Shift+Click para un rango.

Subida por Arrastrar y Soltar

Selecciona archivos en el panel local y arrástralos a la carpeta de destino en el panel remoto. FileZilla pone en cola todos los elementos y comienza a transferirlos inmediatamente.

Subida de Directorio Sincronizado

Para desplegar un directorio de proyecto completo, haz clic derecho en la carpeta local y elige Subir. FileZilla sube recursivamente todo el contenido, preservando la estructura de directorios en el lado remoto.

Monitoreo del Progreso de Transferencia

La cola de transferencias en la parte inferior muestra:

  • Nombre y tamaño del archivo
  • Velocidad de transferencia (bytes/segundo)
  • Tiempo transcurrido y estimado
  • Ruta de destino remota

Una transferencia que se completa pero muestra 0 bytes transferidos es un fallo silencioso — el archivo fue creado pero está vacío. Esto generalmente indica un problema de permisos en el directorio de destino o una violación de cuota de disco en el servidor.

Paso 5: Establecer los Permisos de Archivo Correctos Después de la Subida

Este es el paso que se omite con más frecuencia y la fuente de un porcentaje significativo de tickets de soporte de “mi sitio web está roto después de la subida”.

Después de subir, haz clic derecho en un archivo o directorio en el panel remoto y selecciona Permisos de archivo. La representación numérica se corresponde directamente con los octetos de permisos Unix:

  • 644 — Estándar para archivos web (propietario lectura/escritura, grupo/otros solo lectura)
  • 755 — Estándar para directorios y scripts ejecutables
  • 600 — Archivos privados que no deben ser accesibles desde la web (p. ej., archivos de configuración con credenciales)
  • 777 — Nunca usar esto en producción; otorga acceso de escritura a todos

Para una corrección recursiva de permisos en un árbol de directorios subido completo, marca Recurrir en subdirectorios y aplica 644 a los archivos y 755 a los directorios por separado. FileZilla no diferencia archivos de directorios en un solo paso recursivo — debes ejecutarlo dos veces con el filtro apropiado seleccionado.

Alternativamente, después de conectarte vía SSH, corrige los permisos en bloque:

find /public_html -type f -exec chmod 644 {} ;
find /public_html -type d -exec chmod 755 {} ;

Paso 6: Verificar la Subida

No asumas que una cola de transferencias completada significa que el despliegue es correcto. Realiza estos pasos de verificación:

  1. En FileZilla: Actualiza el directorio remoto (F5 o clic derecho > Actualizar) y confirma que los tamaños de archivo coinciden con los originales locales. Una discrepancia de tamaño indica una transferencia truncada.
  2. Vía navegador: Carga la página actualizada y realiza una actualización forzada (Ctrl+Shift+R) para omitir la caché del navegador.
  3. Vía SSH: Para verificación del lado del servidor, compara checksums:
md5sum /public_html/index.html

Compara la salida con el checksum del archivo local. Una discrepancia significa que el archivo fue corrompido en tránsito — raro con SFTP pero posible con FTP simple en conexiones inestables.

Técnicas Avanzadas y Patrones de Producción

Reanudar Transferencias Fallidas

Si se interrumpe la transferencia de un archivo grande, FileZilla usa el comando REST de FTP (o el equivalente de SFTP) para reanudar desde el último desplazamiento de byte confirmado. En la pestaña Transferencias fallidas, haz clic derecho en el elemento fallido y selecciona Restablecer y volver a poner en cola los archivos fallidos, luego inicia la cola nuevamente. Esto funciona de manera confiable con SFTP; la reanudación de FTP simple depende del soporte del servidor para el comando REST.

Excluir Archivos de la Subida

Los Filtros de nombre de archivo de FileZilla en Editar > Filtros de nombre de archivo te permiten definir reglas para excluir archivos que coincidan con patrones — por ejemplo, excluir directorios .git, node_modules, .DS_Store o archivos .env de una subida accidental. Esta es una salvaguarda crítica: subir un archivo .env que contiene credenciales de base de datos o claves API a una raíz web pública es un incidente de seguridad grave.

Transferencias FTP Programadas/Automatizadas

Para pipelines CI/CD o despliegues programados, la interfaz gráfica de FileZilla no es apropiada. Usa la utilidad de línea de comandos lftp en su lugar:

lftp -u username,password sftp://your-server.com << 'EOF'
set sftp:auto-confirm yes
mirror --reverse --delete --verbose /local/project/ /public_html/
EOF

El indicador --reverse sube (local a remoto), --delete elimina archivos remotos no presentes localmente (usar con precaución), y --verbose registra cada operación. Este patrón es adecuado para despliegues automatizados en entornos de VPS Hosting donde el acceso SSH está disponible.

Usar rsync Sobre SSH como Alternativa a FTP

Para despliegues grandes o sincronizaciones incrementales, rsync sobre SSH es dramáticamente más eficiente que FTP porque transfiere solo los bloques modificados dentro de los archivos, no los archivos completos:

rsync -avz --progress --delete /local/project/ user@your-server.com:/public_html/
    -a — Modo archivo (preserva permisos, marcas de tiempo, enlaces simbólicos)
    -v — Salida detallada
    -z — Comprimir datos durante la transferencia
    --delete — Eliminar archivos remotos eliminados localmente
    
    rsync requiere acceso SSH y no está disponible a través de paneles de control de hosting compartido, pero es la herramienta correcta para cualquier entorno donde controles el stack del servidor.
    Solución de Problemas Comunes de FTP y SFTP
    Tiempo de Conexión Agotado o Rechazado
    
    Verifica que el nombre de host se resuelva correctamente: nslookup ftp.yourdomain.com
  • Confirma que el puerto está abierto: telnet your-server.com 21 o nc -zv your-server.com 22
  • Comprueba las reglas de firewall del servidor — en Linux, iptables -L o ufw status mostrará si el puerto está permitido
  • Para SFTP, confirma que el demonio SSH está en ejecución: systemctl status sshd
  • 530 Fallo de Autenticación de Inicio de Sesión

    • Confirma que el nombre de usuario es exacto — los nombres de usuario FTP distinguen mayúsculas de minúsculas en sistemas Linux
    • Verifica que la cuenta no esté bloqueada: passwd -S username en el servidor
    • Comprueba /var/log/auth.log o /var/log/secure para conocer el motivo del rechazo
    • Si usas cPanel, confirma que la cuenta FTP no haya expirado o sido suspendida

    550 Permiso Denegado en la Subida

    El directorio remoto no otorga acceso de escritura al usuario FTP autenticado. Comprueba la propiedad y los permisos:

    ls -la /public_html/

    Si el directorio es propiedad de un usuario diferente, ajusta la propiedad (chown) o concede permiso de escritura al grupo (chmod g+w). En hosting compartido, esto se gestiona a través del administrador de archivos del panel de control de hosting.

    Fallos de Conexión en Modo Pasivo

    Si ves “No se pudo recuperar el listado de directorios” después de un inicio de sesión exitoso, el rango de puertos pasivos del servidor no es accesible. En FileZilla, ve a Editar > Configuración > FTP > Modo pasivo y prueba Volver al modo activo. En el lado del servidor, asegúrate de que el rango de puertos pasivos (comúnmente 49152–65534) esté abierto en el firewall y correctamente configurado en los ajustes del demonio FTP (p. ej., pasv_min_port y pasv_max_port en vsftpd.conf).

    Corrupción por Transferencia Binaria vs. ASCII

    Los archivos PHP subidos en modo ASCII desde un cliente Windows pueden tener los finales de línea estilo Windows (rn) convertidos, lo que puede romper ciertos analizadores. Confirma que FileZilla esté configurado en modo Binario en Transferencia > Tipo de transferencia > Binario.

    Métodos Alternativos de Subida

    FTP no siempre es la herramienta adecuada. Las siguientes alternativas vale la pena conocer:

    Administrador de archivos de cPanel / Plesk: Disponible a través del panel de control basado en web en Hosting Web Compartido y Paneles de Control VPS. Adecuado para pequeñas ediciones y subidas de archivos individuales. Tiene un límite de tamaño de archivo de 2 GB en la mayoría de las implementaciones y no es adecuado para transferencias masivas.

    SCP (Copia Segura): Una herramienta de copia basada en SSH simple y scriptable. Sin capacidad de reanudación, sin listado de directorios, pero extremadamente confiable para transferencias únicas:

    scp -r /local/project/ user@your-server.com:/public_html/

    Despliegue basado en Git: Empuja a un repositorio bare en el servidor y usa un hook post-receive para extraer archivos en la raíz web. Este es el patrón de despliegue más limpio para código — proporciona historial de versiones, capacidad de reversión y elimina completamente la gestión manual de archivos.

    Sincronización de almacenamiento de objetos / CDN: Para activos estáticos, sincronizar con un bucket compatible con S3 y servir vía CDN es más escalable que el despliegue basado en FTP y elimina completamente el servidor web de la ruta de entrega de activos estáticos.

    Matriz de Decisión Rápida: Elegir el Método de Transferencia Correcto

    EscenarioMétodo Recomendado
    Edición puntual de archivo en hosting compartidoAdministrador de archivos de cPanel
    Despliegue regular de sitio web, sin SSHSFTP vía FileZilla
    Despliegue automatizado en pipeline CI/CD`lftp` o `rsync` sobre SSH
    Archivo binario grande, transferencia única`scp`
    Despliegue incremental de código`rsync` o hook Git post-receive
    Sistema heredado que requiere FTPFTPS (TLS explícito) como mínimo
    Despliegue masivo de activos estáticosSincronización con almacenamiento de objetos compatible con S3

    Lista de Verificación Técnica Clave Antes de Publicar

    • Protocolo: Solo SFTP o FTPS — nunca FTP simple en un servidor de producción
    • Credenciales: Usa cuentas FTP/SFTP dedicadas limitadas al directorio mínimo requerido, no root ni el usuario principal del sistema
    • Modo de transferencia: Binario, no Automático ni ASCII
    • Permisos de archivo: 644 para archivos, 755 para directorios — verificados después de la subida
    • Archivos sensibles: Confirma que .env, .git/, node_modules/ y los archivos de configuración con credenciales estén excluidos de la subida mediante filtros de nombre de archivo
    • Verificación de checksum: Comparación MD5 o SHA-256 para archivos críticos después de la transferencia
    • Modo pasivo: Habilitado por defecto en el cliente FTP
    • Claves SSH: Usa autenticación basada en clave para SFTP en cualquier servidor que controles; deshabilita la autenticación por contraseña en sshd_config donde sea posible

    Preguntas Frecuentes

    ¿Cuál es la diferencia entre FTP y SFTP?

    FTP transmite datos y credenciales en texto claro a través de dos canales TCP separados (control en el puerto 21, datos en el puerto 20 o efímero). SFTP es un protocolo completamente diferente construido sobre SSH que multiplexa todo a través de un único canal cifrado en el puerto 22. Comparten nombre pero no comparten ningún código de protocolo.

    ¿Por qué FileZilla muestra “Tiempo de conexión agotado” incluso con credenciales correctas?

    Un tiempo de espera antes de la autenticación generalmente significa que el puerto del servidor no es accesible — bloqueado por un firewall, el servicio no está en ejecución o el nombre de host no se resuelve a la IP correcta. Un tiempo de espera después de la autenticación generalmente indica un problema de modo pasivo donde el rango de puertos del canal de datos está bloqueado por el firewall. Comprueba las reglas de firewall del lado del servidor y confirma que el rango de puertos pasivos esté abierto.

    ¿Puedo usar FTP para subir archivos a un VPS sin panel de control?

    Sí. Instala un demonio SSH compatible con SFTP (OpenSSH, que es estándar en todas las distribuciones Linux) — no se requiere software adicional de servidor FTP. Conéctate con FileZilla usando el protocolo SFTP en el puerto 22 y tus credenciales SSH o par de claves. Este es el enfoque recomendado para cualquier entorno de VPS Hosting.

    ¿Qué permisos de archivo deben tener los archivos de WordPress después de la subida por FTP?

    Los archivos principales de WordPress deben ser 644, los directorios 755, y wp-config.php debe ser 600 (solo lectura/escritura del propietario). El directorio wp-content/uploads requiere 755 o 775 para que el servidor web pueda escribir los medios subidos. Nunca establezcas ningún directorio de WordPress en 777.

    ¿Existe un límite de tamaño de archivo al subir vía FTP?

    FTP y SFTP en sí mismos no imponen ningún límite de tamaño de archivo inherente — las transferencias se transmiten en streaming. Los límites prácticos provienen de las cuotas de disco del lado del servidor, el upload_max_filesize de PHP (irrelevante para FTP, que omite PHP por completo) o los límites del sistema de archivos (ext4 admite archivos de hasta 16 TB). Para el Hosting Web Compartido, el proveedor de hosting puede imponer una cuota de disco que limita el almacenamiento total en lugar del tamaño de archivo individual.

    15%

    Ahorra 15%<\/span> en todos los servicios de hosting

    Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

    Usa el código:

    Skills
    Comenzar