Apuntes sobre Otras cosas

Cajón Desastre: Todo lo que no encaja en ninguna parte.

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 OK
  • 226 → Transferencia completada
  • 230 → Login correcto

4xx - Error temporal (reintentar puede funcionar)

  • 421 → Servicio no disponible (servidor sobrecargado)
  • 426 → Conexión cerrada, transferencia abortada
  • 450 → Archivo no disponible (ocupado)

5xx - Error permanente

  • 500 → Comando no reconocido
  • 530 → Login incorrecto
  • 550 → 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
TOP