Problema de recuperación de archivo FTP error 503 use Auth first

xda_7822 Mensajes publicados 7 Estado Miembro -  
brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención   -

Hola,

He creado un .bat muy simple para subir cada día un archivo desde un servidor remoto al que accedo a través de FTP.

Si utilizo Filezilla, puedo conectarme, pero mi batch me devuelve el error "503 use Auth first" y no consigo solucionar este problema.

El error se produce después de la instrucción "echo user USER_TOTO MDP_TOTO"

Si alguien puede ayudarme !!!!!

A continuación, mi batch

echo off

set path=C:\toto

(

    echo open int-clt.toto.fr 21000

    echo user USER_TOTO MDP_TOTO

    echo prompt

    echo binary

    echo get /SOC-TIERS.CSV

    echo disconnect

    echo bye

) >> %path%\log.ftp

cd C:\WINDOWS\system32

ftp -s:C:\toto\log.ftp -n

pause >nul

5 respuestas

  1. contrariness Mensajes publicados 17905 Fecha de registro   Estado Miembro Última intervención   6 243
     

    No soy un especialista en batch, pero el error indica que estás intentando realizar una acción antes de haberte autenticado...
    ¿No habría dos líneas que invertir en tu batch?

    0
    1. brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención   4 179
       

      Hola,

      No, porque el comando ftp lee el archivo de configuración log.ftp antes de ser ejecutado y la autenticación se realiza justo después de la conexión.

      Este archivo de configuración no tiene que ser necesariamente en formato .ftp (un .txt es suficiente) y no vemos el interés de recrearlo sobre la marcha en cada ejecución.

      Si no se desea la persistencia de los identificadores, habrá que eliminar el Batch, volver al principio, o integrar en el Batch la eliminación del archivo .txt en el disco después de su uso.

      Volviendo a lo nuestro, me parece que si queremos que el identificador y la contraseña estén en la misma línea, debemos, como los demás, utilizar el interruptor -n antes del nombre del archivo:

      ftp -n -s:C:\toto\log.ftp

      Pero dado que no escribimos por kilómetro y pasamos por un archivo de configuración, nada impide tampoco, esta vez sin el interruptor -n, en lugar de:

      echo user username password

      dos líneas sucesivas:

      echo username
      echo password

      La orden de PATH es, por otra parte, discutible (me basta con calificar el camino de copia del script), y la que sigue no sirve para nada ya que C:\Windows\System32 forma parte del PATH por defecto y ftp.exe se encuentra allí.

      0
      1. xda_7822 Mensajes publicados 7 Estado Miembro > brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención  
         

        Hola brucine, gracias por interesarte en mi problema. En cuanto a la eliminación del log.ftp, estoy de acuerdo, el objetivo principal es descargar un archivo, la finalidad del script es para más tarde.

        También he probado con un batch que contiene la línea

        ftp -s:toto.ftp y también ftp -s:toto.ftp -n

        luego el script:

        open int-clt.toto.fr 21000
        AUTH TLS
        user ID_TOTO MDP_TOTO
        prompt
        get /SOC-TIERS.CSV
        quit

        Pero tengo el mismo error.

        También anoto que hablas de hacer 2 líneas de identificación

        echo username
        echo password

        Ya había buscado en este sentido, pero la línea

        echo password MDP_TOTO me devuelve un error "comando no válido".

        0
      2. brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención   4 179 > xda_7822 Mensajes publicados 7 Estado Miembro
         

        No tengo errores en el archivo de registro después de haber copiado servilmente tu script, excepto obviamente la carpeta personalizada y el comando ftp en sí, aunque en un echo global, pero cada uno tiene lo suyo, prefiero redirigir cada línea:

        echo open int-clt.toto.fr 21000>>log.txt

        echo user USER_TOTO MDP_TOTO>>log.txt

        No hay razón para que el comando echo no sea válido, repite lo que se le pide de manera masiva excepto por caracteres especiales no escapados.

        Pero no es echo password MDP_TOTO>>log.txt sino
        echo MDP_TOTO>>log.txt: la secuencia ftp sabe que, en orden, está esperando el identificador y la contraseña.

        0
  2. xda_7822 Mensajes publicados 7 Estado Miembro
     

    gracias por su ayuda, pero no, no es eso, ya lo he intentado

    0
  3. contrariness Mensajes publicados 17905 Fecha de registro   Estado Miembro Última intervención   6 243
     

    ¿Y Filezilla, no tiene un registro de errores?

    0
    1. xda_7822 Mensajes publicados 7 Estado Miembro
       

      No, cuando me conecto con Filezilla todo va bien. Excepto que, por supuesto, mi objetivo no es usar Filezilla, sino hacer un .bat para ponerlo en una tarea programada más adelante y automatizar la recuperación del archivo en cuestión.

      0
    2. brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención   4 179
       

      Hola,

      Me parece que, de memoria (hace un tiempo que no trabajo con eso), FileZilla no puede "scriptar" excepto el comando fzcli de FileZilla Pro, que es de pago.

      Esto explicaría el error observado a través de FileZilla (pero no el de la orden ftp que utiliza el cliente ftp de Windows por defecto).

      0
  4. brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención   14 453
     

    Hola,

    no existe el comando ftp

    usuario toto contraseña

    es usuario toto y hay que esperar el aviso para la contraseña

    por ejemplo, una pausa, luego la contraseña.

    no creo que se pueda hacer ftp con un batch así, hay que esperar el aviso y responder después.

    Hacía cosas como eso antes, pero con scripts de Teraterm que son mucho más potentes.

    Además de eso, NUNCA se pone una contraseña en claro en un script.


    Y ahí está, voilà ....

    Pero qué penoso, ¡qué molestos son los interlineados!!

    0
    1. brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención   4 179
       

      Hola,

      Por supuesto que sí, la reunión en una sola línea se utiliza después del interruptor
      ftp -n que restablece la contraseña, ver por ejemplo aquí en 19.
      https://stackoverflow.com/questions/16158138/how-to-ftp-with-a-batch-file

      No me gusta la sintaxis y prefiero usar dos entradas distintas, pero eso no significa que no exista.

      Si se introduce la contraseña sobre la marcha y hay otros usuarios potenciales en la PC, por supuesto debemos destruir el propio script después de su uso o destruir el archivo de configuración, ver por ejemplo aquí pero es otra cuestión:
      https://www.robvanderwoude.com/ftp.php

      0
    2. brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención   14 453 > brucine Mensajes publicados 24992 Fecha de registro   Estado Miembro Última intervención  
       

      Por otro lado, hay algo más simple:

      los comandos curl o wget.

      Curl está incluido en Windows: https://www.ionos.fr/digitalguide/serveur/outils/debuter-dans-curl-sous-windows/ y wget se instala fácilmente.

      Ambos aceptan el formato url:

      añadir la carpeta de salida con -o en curl y -O en wget y debería funcionar mejor que ftp.

      curl también permite la carga.

      0
    3. xda_7822 Mensajes publicados 7 Estado Miembro > brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención  
       

      Gracias brupala,

      He probado curl (que no conocía), parece fácil pero al final llego al mismo resultado: error curl: (67) Acceso denegado: 503

      0
    4. brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención   14 453 > xda_7822 Mensajes publicados 7 Estado Miembro
       

      ¿Ah, qué línea de comando pones?

      0
    5. xda_7822 Mensajes publicados 7 Estado Miembro > brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención  
       

      curl -k ftp://int-clt.TOTO.fr:21000 --user USERTOTO:MDP_TOTO

       ni siquiera he puesto una línea para recuperar el archivo. Solo estoy en la conexión

      0
  5. xda_7822 Mensajes publicados 7 Estado Miembro
     

    Gracias a todos y a todas por su ayuda.

    El problema está resuelto, el comando FTP no manejaba los formatos TLS (creo haber entendido que esto venía de la vieja versión de Windows Server desde donde se lanzó el comando).

    Finalmente instalé WinSCP y escribí este batch muy simple que funciona muy bien

    1 el .bat

    del "c:\directorio_de_destino\*.CSV" /Q

    del "c:\toto\log.txt\*.CSV" /Q

    "c:\program files (x86)\winscp\winscp.exe" /log="c:\toto\log.txt" /ini=nul /script="c:\toto\script.txt"

    2 el archivo de comando script.TXT

    open ftpes://nombre_usuario:contraseña@nombre_servidor:N°del_puerto/

    get /*.csv "c:\directorio_de_destino\*.*"

    exit

    0
    1. brupala Mensajes publicados 111157 Fecha de registro   Estado Miembro Última intervención   14 453
       

      Sí,

      winscp, no sabía que hacía ftps, siempre he utilizado sftp (SSH), que es mucho más práctico, pero necesita un servidor unix/linux, desgraciadamente windows no lo gestiona a mi conocimiento, aunque ahora tengamos un cliente ssh, ¿por qué no un servidor?

      el cliente windows server, OK, ¿en qué se ejecuta tu servidor?

      0