如何使用 PSFTP 编写 SFTP 命令脚本?

How to script SFTP commands with PSFTP?

我有一个脚本应该列出 SFTP 服务器中的所有文件并将其输出到一个文件中(供另一个脚本使用)。产生所需输出的 ​​cmd 是:

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

Windows Task Scheduler 每天会调用它几次。出于某种原因,当通过用户 SYSTEM 安排此命令(在 .bat 文件中)和 运行ning 时,输出文件将仅包含此:

Remote working directory is /
psftp> quit

当使用另一个用户时,输出符合预期(所有文件的列表)-参见 https://serverfault.com/questions/1084015/why-psftp-script-is-failing-when-ran-as-system。 我需要一种编写脚本的方法,并且能够像该系统中的其他脚本一样将其 运行 设置为 SYSTEM。我还尝试了以下方法:

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

和:

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

其中 lscmd.txt 包含以下内容:

ls

而且行为是一样的。 编辑:正如下面马丁所指出的,下面可能没有生成相同的输出,而是没有触及文件。然而并没有产生预期的结果。

我可以做些什么来完成所需的行为?

OS 是 Windows 服务器 2012 R2。

结果证明在第一次连接时添加了信任 sFTP 服务器的步骤(或将密钥添加到 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys)。查看相关的 serverfault question 了解(稍微)更多关于我是如何做到的细节。 echo ls | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt 和其他变体(例如 -b)之后都起作用了。

EDIT:我相信我最大的问题是将 cmd 设置为 SYSTEM 这样我就可以调试正在发生的事情我做到了)这对我来说很清楚。为了参考和更清晰(因为我没有解释就被否决了!),下面是添加密钥之前命令的输出,只是屏蔽了敏感部分,表明我确实得到了输出文件中的 Remote working directory is / 消息:

C:\Users\myuser>echo ls | psftp -l myftpuser -pw mycomplexpswd sftp_server
The server's host key is not cached. You have no guarantee
that the server is the computer you think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 SHA256: thecomplexfancyhostkey
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n, Return cancels connection, i for more info) 
Using username "myftpuser".
Pre-authentication banner message from server:
| Company FTP Login - Please enter valid credentials to continue
End of banner message from server
Keyboard-interactive authentication prompts from server:
End of keyboard-interactive prompts from server
Remote working directory is /
psftp> quit