He necesitado hacer un mirror de unos directorios que sólo estaban disponibles por ftp y necesito lanzar sincronizaciones periódicas de forma sencilla y cómoda, para ello he usado lftp una vieja herramienta que tenía ya enterrada.
Instalar lftp
apt-get install lftp
Lo más útil de lftp es la capacidad de copiar directorios de forma recursiva ya que por defecto el cliente ftp de toda la vida de las distrubicones de linux no lo soporta.
Como puedo hacer un mirroring:
lftp -u usuario,password ftp.midominio.tld mirror /ruta/ftp/origen /ruta/local/b
ls: Fatal error: Certificate verification: Not trusted
Este error aparece cuando nuestro lftp no es capaz de verificar que el certificado remoto sea válido por lo que no nos permite continuar realizando operaciones en la máquina remota. Esto está bien, si el certificado es correcto, pero habitualmente nos encontraremos con certificados incorrectos o caducados, por lo que podremos desactivarlo, ya que no nos ofrece ningún nivel de seguridad, si el certificado no está correctamente instalado.
Para desactivarlo, yo he usado esta opción con éxito ( aunque hay varias variantes buscando en google ):
set ftp:ssl-allow no;
A lo que tengo que añadir que después de ejecutar este comando con el debug activo:
set debug 10
me ha sido imposible retornar el listado de directorios, y parece ser un bug. Este caso se observa al lanzar el comando `ls` y ver infinitamente el texto: Delaying before reconnect.
Desactivado el debug, funciona correctamente
set debug 0
Mirroring sites using ftp
Aquí os dejo un pequeño script para hacer migración de sitios usando ftp de una forma bastante rápida:
FTP_USER="tu usuario" FTP_PASSWORD="tu password" FTP_HOST=ftp.dominio.ltd SOURCE=/ruta/remota/origen DEST=/ruta/remota/destino lftp -u"${FTP_USER},${FTP_PASSWORD}" -e "set ftp:ssl-allow no; mirror ${SOURCE} ${DEST} --only-newer --verbose --use-pget-n=10; quit" ${FTP_HOST}
A tener en cuenta:
- -u»usuario,password» Es necesario usar las comillas ya que de esa forma escapamos los caracteres especiales que pueda tener el password
- -e«ejecuta comandos una vez que abre la conexión»
- set ftp:ssl-allow no No valida el certificado ssl del servidor ftp
- –only-newer Sólo ficheros nuevos
- –use-pget n=10 Usa 10 conexiones concurrentes
Deja una respuesta