来自Windows服务的Plink无法找到Pageant

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自Windows服务的Plink无法找到Pageant相关的知识,希望对你有一定的参考价值。

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

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

  1. 安装Windows服务以特定用户身份运行
  2. 在启动Windows服务之前,我以该用户身份登录并使用PuTTY生成的密钥启动Pageant。
  3. 然后我启动Windows服务(但由于Plink无法找到Pageant和服务器回复,因此我无法使其正常工作,因为没有支持的身份验证方法可用。)

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

答案

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

另一答案

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

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

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

另一答案

作为@Eugene point out,它是Session 0 Isolation

我设法通过不使用代理但直接将私钥和密码传递给plink.exe来解决问题。通过这样做,我能够在不使用pageant的情况下运行。

无代理人启动plink.exe;

plink.exe -noagent -i private_key.ppk -pw mypassword -P 1234 user@host.com

以上是关于来自Windows服务的Plink无法找到Pageant的主要内容,如果未能解决你的问题,请参考以下文章

ssh 代理 plink 无法弹出 yubikey 输入表单

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

在 Windows 批处理文件中将输入管道输入到 Plink 会添加额外的换行符

linux下的Plink超时和代理