¿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.
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:
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íneasEl directorio de trabajo remoto es /
ypsftp>quit
. Para solucionar esto, puedes intentar lo siguiente:Aquí, el comando lee los comandos de psftp desde el archivo
lscmd.txt
y la salida va al archivols.txt
. El contenido delscmd.txt
debe ser simplementels
. Ten en cuenta que si el archivols.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.