Problema de recuperación de archivo FTP error 503 use Auth first
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
-
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?-
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í.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
quitPero tengo el mismo error.
También anoto que hablas de hacer 2 líneas de identificación
echo username
echo passwordYa había buscado en este sentido, pero la línea
echo password MDP_TOTO me devuelve un error "comando no válido".
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.
-
-
gracias por su ayuda, pero no, no es eso, ya lo he intentado
-
¿Y Filezilla, no tiene un registro de errores?
-
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!!-
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 -
Por otro lado, hay algo más simple:
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.
-
-
-
-
-
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
-
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?
-