Modo pasivo, alternativas modernas, permisos y automatización
1. El modo pasivo (PASV)
1.1 El problema del modo activo
FTP usa dos conexiones TCP:
- Control → cliente → servidor (puerto 21).
- Datos → en modo activo, el servidor abre la conexión hacia el cliente.
En redes con firewall o NAT, esa segunda conexión entrante suele bloquearse, lo que provoca cuelgues al listar (ls
) o transferir.
1.2 Cómo lo soluciona PASV
En modo pasivo, el cliente abre ambas conexiones (control y datos).
El servidor indica un puerto de datos y espera la conexión, en lugar de intentar iniciarla él.
1.3 Activar modo pasivo
En consola FTP clásica:
ftp> quote PASV
ftp> ls
En lftp
:
set ftp:passive-mode on
En clientes gráficos, suele haber una casilla "Usar modo pasivo" en la configuración.
Hoy, la mayoría de clientes usan PASV por defecto, pero es útil saber qué es y cuándo activarlo manualmente.
2. Alternativas modernas y seguras
- SFTP → estándar seguro sobre SSH.
- FTPS → útil para compatibilidad con servidores antiguos que requieren FTP.
- rsync sobre SSH → sincroniza directorios eficientemente.
- scp → copia rápida de archivos vía SSH.
rsync -avz carpeta_local/ usuario@servidor.com:/ruta/remota/
scp archivo usuario@servidor.com:/ruta/remota/
4. Automatización de transferencias
4.1 Usando .netrc
con FTP o lftp
Archivo .netrc
en el home del usuario:
machine servidor.com
login tu_usuario
password tu_contraseña
Permisos:
chmod 600 ~/.netrc
Ejemplo de script:
ftp servidor.com <<EOF
cd /public_html
put index.html
bye
EOF
guarda eso como subir.sh y ejecuta
bash subir.sh
4.2 Automatizar con lftp y mirror
Puedes hacer lo mismo de forma mas moderna y segura, siguiendo el mismo sistema: crear un script con las instrucciones correspondientes y ejecutándolo.
Descargar un directorio completo:
lftp -u usuario sftp://servidor.com -e "mirror /remoto /local; bye"
Subir un directorio completo:
lftp -u usuario sftp://servidor.com -e "mirror -R /local /remoto; bye"
4.3 Tareas programadas con cron
Ejecutar cada noche a las 02:00 un backup vía SFTP:
0 2 * * * lftp -u usuario sftp://servidor.com -e "mirror -R /home/usuario/backup /backup_remoto; bye"
5. Configuración avanzada de lftp
5.1 Archivo de configuración ~/.lftprc
Crear un archivo de configuración para personalizar el comportamiento de lftp:
# Configuración de lftp
set ftp:passive-mode on
set ssl:verify-certificate no
set net:max-retries 3
set net:reconnect-interval-base 5
set net:timeout 30
set cmd:fail-exit yes
Algunas opciones útiles:
set ftp:passive-mode on
→ Usa siempre modo pasivo por defectoset ssl:verify-certificate no
→ Omite verificación de certificados SSL (útil para certificados auto-firmados)set net:max-retries 3
→ Reintenta conexiones hasta 3 vecesset net:timeout 30
→ Timeout de conexión en 30 segundosset cmd:fail-exit yes
→ Sale con error si algún comando falla (útil en scripts)
5.2 Verificar espacio disponible
Antes de transferencias grandes, es útil verificar el espacio:
# Ver tamaño de archivos/directorios locales
du -sh carpeta_local/
du -sh archivo_grande.zip
# En sesión SFTP/FTP, algunos servidores soportan:
sftp> df -h # Espacio libre en servidor (si está soportado)
6. Buenas prácticas
- Usa siempre cifrado (SFTP, FTPS, rsync/SSH).
- Evita credenciales en texto plano; si usas
.netrc
, protégelo con permisos600
. - No uses
chmod 777
salvo en entornos de prueba. - Prueba scripts en entornos controlados antes de producción.
- Verifica el espacio disponible antes de transferencias grandes.