在Windows服务中使用psftp验证服务器主机密钥

时间:2014-10-15 05:25:24

标签: c# windows-services sftp putty

通过Windows服务运行我的SFTP命令批处理文件时,我收到的消息是<。p>

  

服务器的主机密钥未缓存在注册表中。你
  无法保证服务器是您的计算机   认为是。
  服务器的rsa2密钥指纹是:
  ssh-rsa 1024 cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9
  如果您信任此主机,请输入&#34; y&#34;将密钥添加到
  PuTTY的缓存并进行连接。
  如果你想只进行一次连接,没有
  将密钥添加到缓存中,输入&#34; n&#34;。
  如果您不信任此主机,请按Return键放弃   连接。
  将密钥存储在缓存中? (Y / N)
  连接被遗弃。

SSH密钥已缓存在以下路径中,

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys

但由于我的Windows服务在本地计算机上运行,​​我需要手动复制以下路径中的相同密钥,

HKEY_USERS\.DEFAULT\Software\SimonTatham\PuTTY\SshHostkeys

第一次启动服务时,有没有其他方法可以自动执行此操作?

是否有任何命令将缓存从一个注册表复制到另一个(即)来自&#34; HKEY_CURRENT_USER \ Software \ SimonTatham \ PuTTY \ SshHostKeys&#34;到&#34; HKEY_USERS.DEFAULT \ Software \&#34;

我使用了以下命令,

Copy-Item -Path 'HKCU:\Software\SimonTatham\' -Destination 'hku:\Software\' -Recurse

但收到错误,无效的文件路径

1 个答案:

答案 0 :(得分:2)

理想情况下,主机密钥应该是脚本包的一部分(它是会话信息的一部分,还有主机名,用户名等)。

psftp的最新版本允许使用-hostkey开关指定预期的主机密钥:

psftp.exe user@example.com -hostkey aa:bb:cc:...

我之前的回答psftp.exe没有-hostkey开关:

在运行SFTP之前,必须将SshHostkeys注册表项导出到文件并从脚本(批处理文件)中导入它。

或者使用另一个允许在脚本中指定主机密钥的可编写脚本的SFTP客户端。例如。使用WinSCP,您可以:

open sftp://martin:mypassword@example.com/ -hostkey="ssh-rsa 2048 xxxxxxxxxxx...="

请参阅https://winscp.net/eng/docs/scriptcommand_open

(我是WinSCP的作者)