es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo escribir comandos SFTP con PSFTP?

Tengo un script que debería listar todos los archivos en un servidor SFTP y producir la salida en un archivo (para ser utilizado por otro script). El comando que produce la salida necesaria es:

echo ls | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt

y esto sería invocado por el Programador de tareas de Windows un par de veces al día. Por alguna razón, al programar este comando (en un archivo .bat) y ejecutarlo a través del usuario SYSTEM, el archivo de salida solo contendría esto:

Remote working directory is /
psftp> quit

Mientras que cuando se usa otro usuario, la salida es la esperada (lista de todos los archivos) -véase https://serverfault.com/questions/1084015/why-psftp-script-is-failing-when-ran-as-system.
Necesito una manera de escribir un script para eso y poder ejecutarlo como SYSTEM como el resto de mis scripts en ese sistema. También he intentado lo siguiente:

psftp -l myusername -pw mycomplexpwd FTPServerHostname < C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt

y:

psftp -l myusername -pw mycomplexpwd FTPServerHostname -b C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt

donde lscmd.txt contiene lo siguiente:

ls

Y el comportamiento es el mismo. EDITAR: como indicó Martin a continuación, lo siguiente podría no haber generado la misma salida sino que no haber tocado el archivo. Sin embargo, no generó los resultados esperados.

¿Hay algo que pueda hacer para lograr el comportamiento necesario?

El sistema operativo es Windows Server 2012 R2.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para listar todos los archivos en un servidor SFTP y sacarlos en un archivo

    Para listar todos los archivos en un servidor SFTP y sacarlos en un archivo, puedes usar el siguiente comando:

    echo ls | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt
    

    Sin embargo, cuando este comando se programa a través del Programador de tareas de Windows y se ejecuta por el usuario SYSTEM, el archivo de salida solo contiene las líneas El directorio de trabajo remoto es / y psftp>quit. Para solucionar esto, puedes intentar lo siguiente:

    psftp -l myusername -pw mycomplexpwd FTPServerHostname -b C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt
    

    Aquí, el comando lee los comandos de psftp desde el archivo lscmd.txt y la salida va al archivo ls.txt. El contenido de lscmd.txt debe ser simplemente ls. Ten en cuenta que si el archivo ls.txt ya existe antes de ejecutar este comando, será sobrescrito.

    Si esto no funciona, intenta verificar los permisos del usuario SYSTEM en el directorio que contiene los archivos, así como los permisos del servidor SFTP.

Comments are closed.