我如何通过 putty 的 psftp 自动提取文件?

我如何通过 putty 的 psftp 自动提取文件?

我有一台 Windows Server 2003 机器,它用于psftp连接远程 Linux 机器并每小时下载文件。

图片1.png

这台机器给我带来了两个主要挑战:

第一的

计划任务目前设置为以该框上的用户身份运行,我相信需要将用户密码存储在任务计划程序中。但是,当用户密码更改时,任务无法运行。我希望此任务无论如何都始终运行。

  • 我认为第一个问题的解决方案是让计划任务以 的身份运行SYSTEM。这样对吗?如果是这样,我该如何设置?只需SYSTEM在“以...身份运行”框中输入即可?我是否需要为 设置密码,SYSTEM因为我相信我尝试过不使用密码,但它说该作业没有运行,因为密码不正确。也许我做错了。

第二

Putty 要求将服务器的远程密钥存储在注册表中,以验证服务器的真实性。但是,这似乎是按用户存储的,因此,如果我切换脚本以以其他用户身份运行,似乎用户必须首先以交互方式运行脚本,以便将密钥存储在注册表中。

  • Putty 网站上的说明提到,应将密钥添加到以下注册表位置:

    HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
    

但从“HKEY_CURRENT_USER”来看,我认为这不适合用户SYSTEM。如果我确实将此任务设置为以 身份运行SYSTEM,我如何确保主机的注册表中存储了适当的密钥?我不介意手动添加它(有一个 perl 脚本可以转换 known_hosts 文件),但它应该放在哪里?

ps:myscript.bat只是使用 psftp.exe 从远程服务器提取文件。没什么特别的。没有跳过检查授权主机的标志,而且 putty 的人们提到这无论如何都是一个坏主意。

答案1

我知道这个问题已经有了一个公认的答案,但我想补充一下 SYSTEM 帐户的用户注册表配置单元位于何处。实际上,HKEY_USERS\.DEFAULT大多数人错误地认为它是新创建帐户的默认用户配置单元。有关该密钥的历史和背景的更多信息,请参阅 Raymond Chen 的 MSDN 博客:

.Default 用户不是默认用户

答案2

我认为第一个问题的解决方案是让计划任务以 SYSTEM 身份运行。这样对吗?

通常,只有当某项任务确实需要绝对权限时,您才应该以 SYSTEM 身份运行它。更好的选择可能是专门为此任务设置一个服务帐户。然后,您可能希望禁用该帐户的密码过期功能,或者设置通知计划来提醒您更新服务帐户密码和任务详细信息。

您当然可以暂时登录到该服务帐户,以便您可以第一次接受 SSH 密钥。

答案3

在命令行上使用pscp.exe -batch -load PROFILE。使用该配置文件的 ssh 密钥对为您的连接设置配置文件,然后使用该配置文件。

您为此使用的用户帐户应该是本地的,但它不需要任何特殊权限(只需读取密钥并写入文件)。

尝试pscp -h所有命令开关。

答案4

我知道这是一篇老帖子,但我把这个答案放在这里是为了帮助其他有同样问题的用户。

Putty 实用程序套件(plink、pscp、psftp 等)有一个 -hostkey 选项。这允许您包含目标服务器的主机密钥,而不必费心将 regkeys 复制到其他帐户(如 SYSTEM)。

pscp.exe /? 将向您显示正确的语法。

-主机密钥 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

您可以通过在常规用户帐户下与目标服务器启动一次 putty 会话来获取主机密钥。

从命令行它看起来像这样:

The server's rsa2 key fingerprint is:
ssh-rsa 2048 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a

用法:

pscp.exe -hostkey 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a -batch -i your-private-key.ppk C:\source.file [email protected]:/var/www/html/

当以系统帐户运行计划任务时,此功能有效。

我希望这对某人有帮助。

相关内容