如何使用PSFTP编写SFTP命令脚本,解决SYSTEM用户运行异常问题
问题根因
你遇到的异常核心原因是PuTTY/psftp的主机密钥校验机制:
普通用户首次连接SFTP服务器时,会弹出主机密钥确认提示,选择确认后密钥会存储在当前用户的注册表路径HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys中,后续连接无需重复校验。但SYSTEM用户的注册表配置是独立的,没有对应的密钥记录,psftp遇到未知主机密钥会直接静默中断,根本不会执行后续的ls命令,因此输出只有初始目录提示和退出信息。
可行解决方案
方案1:命令行直接指定主机密钥(最稳定,无注册表依赖)
- 先用普通用户运行psftp连接目标服务器,记录提示中显示的主机密钥指纹
- 给psftp命令加上
-hostkey参数直接指定密钥,修改后的命令参考:
"C:\Program Files\PuTTY\psftp.exe" -l myusername -pw mycomplexpwd -hostkey 你的服务器主机密钥 FTPServerHostname -b C:\Scripts\lscmd.txt > C:\Scripts\ls.txt
方案2:给SYSTEM用户导入主机密钥
- 普通用户成功连接过一次服务器后,打开注册表编辑器,导出
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys项为reg文件 - 编辑导出的reg文件,把路径中的
HKEY_CURRENT_USER改成HKEY_USERS\.DEFAULT - 双击导入修改后的reg文件,即可让SYSTEM用户读取到已信任的主机密钥
额外注意事项
- 路径权限:不要把脚本、输入输出文件放在普通用户的桌面目录,建议统一放到
C:\Scripts这类独立目录,给该目录赋予SYSTEM用户的完全控制权限,避免权限不足导致读取命令文件、写入输出失败 - 绝对路径:命令中所有程序、文件都写全绝对路径,避免SYSTEM用户的PATH环境变量缺失对应路径,找不到psftp或命令文件
- 任务计划配置:确认任务勾选了「不管用户是否登录都要运行」、「使用最高权限运行」,配置的操作起始目录也要和脚本实际路径一致
内容的提问来源于stack exchange,提问作者amyassin
相关产品推荐
相关产品推荐

