我有一个 Windows cmd 批处理文件,该文件应使用 PuTTY PSFTP exe 通过 sFTP 检索 FTP 服务器上的文件列表,并将其用于进一步处理。cmd 为:
echo ls | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt
它应该输出ls.txt
我在其他脚本中使用的文件中的列表。以普通用户身份运行时,我可以正常获得列表。但是,当使用任务计划程序并以SYSTEM
用户身份安排脚本时,我在输出文件中只得到以下内容:
远程工作目录是 /
psftp>quit
我猜测管道使用存在问题|
,所以我也尝试使用这种语法,但输出也相同:
psftp -l myusername -pw mycomplexpwd FTPServerHostname < C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt
当以 SYSTEM 而不是我的用户身份安排作业时,可能是什么原因导致问题?以及如何以 SYSTEM 身份获取列表?请注意,当以管理员身份运行脚本时(右键单击 - 以管理员身份运行),我可以正常获取列表,问题仅在使用任务计划程序并以 SYSTEM 身份安排任务时出现。
操作系统是Windows Server 2012 R2。
答案1
因此,经过一番挖掘,结果发现 PSFTP 无法识别 ftp 服务器的密钥。我以SYSTEM
(这可能有点棘手!) 并通过 PSFTP 连接,接受信任主机 (sFTP 服务器),之后脚本按预期工作!它没有给其他用户造成问题,因为他们在测试中使用过并且之前有提示!
仅供参考,该密钥也存储在注册表中HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
,因此如果您不想手动登录,可以将其添加到其他用户那里(我在我的脚本中添加了该检查,如果运行该脚本的任何用户缺少该密钥,则添加它)..
编辑:我认为我最大的问题是获取 cmd,以便SYSTEM
我可以调试正在发生的事情,一旦我可以(请参阅上面的链接了解我是如何做到的),我就会明白。为了参考和更好的清晰度,下面是添加密钥之前的命令输出,只是屏蔽了敏感部分:
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