4

我有一个将plink.exe用于 SSH 连接的 Windows 服务,我发现 Plink 找不到正在运行的 Pageant。

这是我到目前为止所做的步骤。

  1. 安装 Windows 服务以作为特定用户运行
  2. 在启动 Windows 服务之前,我以该用户身份登录并使用 PuTTY 生成的密钥启动 Pageant。
  3. 然后我启动 Windows 服务(但我无法让它工作,因为 Plink 找不到 Pageant 并且服务器回复为No supported authentication methods available。)

注意:如果我使用该用户将 Windows 服务作为控制台应用程序运行,则一切正常。

4

3 回答 3

4

PLink 将在服务会话 (Session\0) 中运行,而选美在用户会话 (Session\1) 中运行。Plink 使用一些进程间通信,从您的问题来看,它不能跨会话工作。很可能内部存在 MMF 通信,并且对象是在没有前缀的情况下创建的,即它们成为仅会话(不是全局的)。您需要构建自定义版本的 plink 来解决问题。

于 2012-08-02T11:17:03.693 回答
3

Pageant 明确允许将密钥提供给仅在同一 Windows 会话中运行的应用程序(PuTTY、PSFTP、PSCP、WinSCP、FileZilla)。这显然是出于安全原因,不允许同一台机器上的不同用户劫持其他用户加载的私钥。甚至为了方便(具有讽刺意味),这样您就不会无意中使用其他用户的密钥(导致您的帐户由于无效的登录尝试而被锁定)。

另请注意,选美无论如何都不适用于自动化。-i对于自动化,使用命令行参数显式使用私钥。
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter3.html#using-cmdline-identity

这样的私钥必须是未加密的。请注意,如果有人获得对密钥的访问权,这会带来安全风险。您应该考虑将对未受保护的私钥文件的访问限制为仅运行脚本的本地帐户(使用Windows 文件系统权限)。

于 2015-01-05T09:01:09.243 回答
2

正如@Eugene 指出的那样,它是Session 0 Isolation

我设法通过不使用代理解决了这个问题,而是直接将私钥和密码传递给plink.exe. 通过这样做,我可以在不使用pageant.

plink.exe无需代理即可开始;

plink.exe -noagent -i private_key.ppk -pw mypassword -P 1234 user@host.com
于 2012-08-07T01:56:52.017 回答