Gestión de errores y troubleshooting
1. Códigos de error FTP más comunes
1.1 Códigos de estado principales
Los servidores FTP responden con códigos de 3 dígitos que indican el resultado:
2xx - Éxito
200
→ Comando OK226
→ Transferencia completada230
→ Login correcto
4xx - Error temporal (reintentar puede funcionar)
421
→ Servicio no disponible (servidor sobrecargado)426
→ Conexión cerrada, transferencia abortada450
→ Archivo no disponible (ocupado)
5xx - Error permanente
500
→ Comando no reconocido530
→ Login incorrecto550
→ Archivo no encontrado o sin permisos
1.2 Interpretando los errores
# Error típico de permisos
ftp> get archivo_privado.txt
550 Permission denied
# Error de archivo no encontrado
ftp> get inexistente.txt
550 archivo_inexistente.txt: No such file or directory
# Error de conexión
ftp: connect: Connection refused
2. Problemas de conectividad típicos
2.1 Timeouts y conexiones rechazadas
Síntomas:
ftp: connect to address XXX.XXX.XXX.XXX: Connection timed out
ftp: connect: Connection refused
Posibles causas:
- Servidor caído o inaccesible
- Firewall bloqueando el puerto
- Puerto incorrecto (21 para FTP, 22 para SFTP)
- Problemas de red/DNS
Diagnóstico:
# Verificar conectividad básica
ping servidor.com
# Verificar si el puerto está abierto
telnet servidor.com 21 # Para FTP
telnet servidor.com 22 # Para SSH/SFTP
# Con herramientas modernas
nc -zv servidor.com 21
nmap -p 21,22 servidor.com
2.2 Problemas con modo pasivo
Síntomas:
ftp> ls
200 PORT command successful
425 Can't open data connection
Solución:
ftp> quote PASV
200 Entering passive mode
ftp> ls
# Ahora debería funcionar
2.3 Problemas SSL/TLS en FTPS
Síntomas:
lftp: SSL connection failed: certificate verify failed
Solución temporal:
# En lftp
set ssl:verify-certificate no
# O en ~/.lftprc
echo "set ssl:verify-certificate no" >> ~/.lftprc
3. Herramientas de diagnóstico
3.1 Verificar conexiones activas
# Ver conexiones de red actuales
netstat -an | grep :21 # Conexiones FTP
ss -an | grep :22 # Conexiones SSH/SFTP (herramienta moderna)
3.2 Logs del sistema
# Logs típicos donde buscar errores
tail -f /var/log/auth.log # Autenticación SSH/SFTP
tail -f /var/log/vsftpd.log # Servidor vsftpd
journalctl -u ssh # Logs SSH con systemd
3.3 Verbose mode para debugging
# FTP con información detallada
ftp -d servidor.com
# SFTP con debugging
sftp -v usuario@servidor.com
# lftp con información detallada
lftp -d servidor.com
4. Soluciones a problemas frecuentes
4.1 "Connection reset by peer"
Causa: El servidor cierra la conexión inesperadamente
Soluciones:
# Aumentar timeout en lftp
set net:timeout 60
# Reducir número de conexiones paralelas
set net:connection-limit 1
4.2 Transferencias que se cuelgan
Para FTP clásico:
ftp> quote PASV # Cambiar a modo pasivo
ftp> binary # Asegurar modo binario
Para lftp:
set ftp:passive-mode on
set net:max-retries 3
set net:reconnect-interval-base 5
4.3 Archivos corrompidos en transferencia
Verificación con checksums:
# Generar checksum antes de subir
md5sum archivo_local.zip > archivo_local.zip.md5
# Subir ambos archivos
lftp -e "put archivo_local.zip; put archivo_local.zip.md5; bye" ...
# En el servidor, verificar integridad
md5sum -c archivo_local.zip.md5
5. Scripts robustos con manejo de errores
5.1 Script bash con verificaciones
#!/bin/bash
SERVER="servidor.com"
USER="usuario"
LOCAL_FILE="backup.tar.gz"
REMOTE_PATH="/backups/"
# Verificar que el archivo local existe
if [ ! -f "$LOCAL_FILE" ]; then
echo "Error: $LOCAL_FILE no encontrado"
exit 1
fi
# Verificar conectividad
if ! ping -c 1 "$SERVER" > /dev/null 2>&1; then
echo "Error: No se puede alcanzar $SERVER"
exit 1
fi
# Transferencia con lftp y manejo de errores
lftp -u "$USER" sftp://"$SERVER" <<EOF
set cmd:fail-exit yes
set net:max-retries 2
cd $REMOTE_PATH
put $LOCAL_FILE
bye
EOF
if [ $? -eq 0 ]; then
echo "Transferencia completada exitosamente"
else
echo "Error en la transferencia"
exit 1
fi
5.2 Configuración robusta para lftp
# ~/.lftprc para máxima robustez
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
set net:connection-limit 2
set ftp:sync-mode off