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

Securely pass password to PuTTY process on start

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

当前方法的问题是,在 Windows 任务管理器中,管理员可能会看到所有启动的 PuTTY 实例和相应的凭据作为命令行参数。

到目前为止,我还没有找到任何切实可行的解决方案来避免这种情况。这些是我目前研究的内容:

一些可行的想法:

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

从 0.77 开始,PuTTY 可以使用 -pwfile switch.

从文件中读取密码

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

public void CreatePipe()
{
    var server = new NamedPipeServerStream("SecretPipe");
    server.WaitForConnection();
    StreamWriter writer = new StreamWriter(server);
    writer.Write("top!!secret");
    writer.Flush();
    server.Dispose();
}

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

putty.exe -l testuser -pwfile "\.\PIPE\SecretPipe" hostname