首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全地在启动时将密码传递给PuTTY进程

安全地在启动时将密码传递给PuTTY进程
EN

Stack Overflow用户
提问于 2022-02-11 17:37:20
回答 2查看 576关注 0票数 0

我正在维护我们公司的一个应用程序(用C#编写),它运行在跳线上,并提供跨不同服务器搜索和启动到该服务器的PuTTY连接的功能。为此,应用程序当前启动PuTTY进程并传递参数,如主机名、用户名和密码。从密码管理器服务中检索每个服务器的密码。参数通过命令行接口传递给PuTTY。因此,应用程序的目的是自动检索密码和登录到不同的服务器。

当前方法的问题是,在Windows中,管理员可以将所有已启动的PuTTY实例和相应的凭据作为命令行参数。

到目前为止,我还没有找到任何实际的解决方案来规避这个问题。到目前为止,我研究的内容如下:

  • 没有传递密码参数,而是使用SendKeys在promt中键入密码:不可靠,因为无法读取PuTTY输出,也无法知道应用程序何时准备好输入输入。使用Plink而不是PuTTY并通过stdin传递参数的
  • :Plink支持stdin/ stdout通信,但是在登录后,终端功能非常有限,无法在实际中使用:我看到了一些建议,即修改PuTTY源代码,以便在应用程序启动后重写主arg中的密码。然而,这个解决方案似乎只适用于Linux,而不是Windows.
  • 使用SSH.NET库来提供我自己的SSH终端实现: SSH.NET库似乎类似于Plink,更适合以编程方式发出命令,但不适合为用户打开终端。我想要实现一个完整的终端需要做大量的工作。

一些可能有用的想法:

  • 修改了PuTTY代码,以便通过stdin: can传递参数,但我不知道这有多容易,因为我没有支持stdin输出的非常好的C
  • 备用客户端。Java库JSch看起来相当强大,似乎已经包含了一个终端。是否可以创建一个独立的应用程序,它可以接收stdin并使用它打开终端并自动登录?

如有任何进一步建议,将不胜感激。您是否知道其他Windows替代PuTTY的方法,它支持以更安全的方式传递凭据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-21 07:10:58

按照Martin的建议,我创建了一个最小的示例,它在NamedPipe中创建了一个C#,并将它作为pwfile参数传递给PuTTY:

代码语言:javascript
复制
public void CreatePipe()
{
    var server = new NamedPipeServerStream("SecretPipe");
    server.WaitForConnection();
    StreamWriter writer = new StreamWriter(server);
    writer.Write("top!!secret");
    writer.Flush();
    server.Dispose();
}

然后,可以以管道作为PuTTY参数启动如下所示:

代码语言:javascript
复制
putty.exe -l testuser -pwfile "\\.\PIPE\SecretPipe" hostname
票数 0
EN

Stack Overflow用户

发布于 2022-02-11 18:57:27

从0.77开始,PuTTY可以使用-pwfile switch从文件中读取密码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71084301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档