![在执行计划任务时连接时,主机 ssh-rsa 密钥被 WinSCP 拒绝,但手动启动时不会拒绝](https://linux22.com/image/741924/%E5%9C%A8%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E6%97%B6%E8%BF%9E%E6%8E%A5%E6%97%B6%EF%BC%8C%E4%B8%BB%E6%9C%BA%20ssh-rsa%20%E5%AF%86%E9%92%A5%E8%A2%AB%20WinSCP%20%E6%8B%92%E7%BB%9D%EF%BC%8C%E4%BD%86%E6%89%8B%E5%8A%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E4%B8%8D%E4%BC%9A%E6%8B%92%E7%BB%9D.png)
作为在 Windows Server 2012 计算机上运行的计划任务的一部分,我使用 WinSCP 通过凭据和 ssh-rsa 密钥通过 sFTP 进行连接。计划任务运行时,连接失败并显示以下错误消息:
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Authenticating...
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Host key does not match configured key "ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="!
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Host key fingerprint is ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8=.
2019/08/26 05:27:28 - Push files to sFTP - (stdout)
2019/08/26 05:27:28 - Push files to sFTP - (stdout) Authentication failed.
如您所见,两种情况下的 ssh-rsa 密钥都是相同的。如果我从任务计划程序手动运行任务,执行计划任务调用的批处理文件,或者如果我使用具有相同配置的 WinSCP 手动连接到 sFTP 服务器,则连接成功。
这是连接字符串(服务器详细信息已编辑):
"c:\Program Files (x86)\WinSCP\WinSCP.com" /command "open sftp://user:[email protected] -passive=on -timeout=500 -hostkey=ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="
知道为什么它在按计划任务运行时会失败吗?唯一的变化是 SFTP 地址的更新,因为另一方更新了他们的 IP 和关联的 URL,但根据,密钥没有改变(正如我可以手动连接的事实所示)
答案1
你的脚本是错误的。-hostkey
转变必须包括密钥类型和密钥大小(只有即将推出的 WinSCP 5.16 才允许使用校验和,但无论如何都不鼓励这样做)。
所以应该是:
"...\WinSCP.com" /command "open ... -hostkey=""ssh-rsa 2048 ps8Qj1+Y5WmEKcjdH05cqfzOGCxXHa+X3lhCixestv8="""
它在其他环境中工作的原因很可能是主机密钥缓存在您用于测试的帐户的 Windows 注册表中。因此甚至不考虑来自脚本的值。而运行任务计划程序作业的帐户没有缓存密钥。
WinSCP FAQ 中对此进行了介绍我的脚本在手动执行时运行良好,但在由 Windows Scheduler、SSIS 或其他自动化服务运行时失败或挂起。我做错了什么?