我有一台 Windows Server 2003 机器,它用于psftp
连接远程 Linux 机器并每小时下载文件。
这台机器给我带来了两个主要挑战:
第一的
计划任务目前设置为以该框上的用户身份运行,我相信需要将用户密码存储在任务计划程序中。但是,当用户密码更改时,任务无法运行。我希望此任务无论如何都始终运行。
- 我认为第一个问题的解决方案是让计划任务以 的身份运行
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 博客:
答案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/
当以系统帐户运行计划任务时,此功能有效。
我希望这对某人有帮助。