带有RSA私钥口令支持的SSH库

5
我正在开发一个使用Visual C#编写的小应用程序,需要使用SSH库。我已经尝试过DotNetSSH、Renci.SshNet和SharpSsh。Granados SSH库文档不全(至少我几乎什么都没找到),所以我跳过了这个库。
所有这些库都有一个巨大的问题(在我看来):它们无法打开带有密码保护的SSH私钥。
Renci.SshNet不支持AES。DotNetSSH和SharpSsh使用jsch(Java SSH库)作为基础,似乎存在一个错误(?)导致无法解密私钥,并一直要求输入密码。
使用用户名+密码和没有密码保护的私钥连接SharpSsh效果很好。
有人遇到过同样的问题吗? 或者是否有其他C# SSH库支持“RSA私钥和密码保护”?
提前感谢。

Renci.SshNet很可能支持私钥文件的密码短语。请在此处查看https://github.com/zeevl/Renci.SshNet/blob/master/Renci.SshNet/PrivateKeyFile.cs 我即将自己实现它,成功后会报告。 - Raphael Pinel
这是一个非常旧的文件版本。此后,我已经添加了对椭圆曲线PrivateKeyFiles的支持,并为OPENSSH-Format支持打开了另一个拉取请求,包括口令支持。请参见https://github.com/sshnet/SSH.NET/blob/develop/src/Renci.SshNet/PrivateKeyFile.cs和https://github.com/sshnet/SSH.NET/pull/614。 - user1646933
3个回答

7

我成功地使用了开源库SSH.NET来处理SSH和SFTP。

以下是连接密钥文件加密码的代码。

    public void Connect(string host, int port, string user, string passPhrase, string privateKeyFilePath) {

        var keyFiles = new[] { new PrivateKeyFile(privateKeyFilePath, passPhrase) };

        var methods = new List<AuthenticationMethod>();
        methods.Add(new PasswordAuthenticationMethod(user, passPhrase));
        methods.Add(new PrivateKeyAuthenticationMethod(user, keyFiles));

        var con = new ConnectionInfo(host, port, user, methods.ToArray());
        var client = new SshClient(con);
        client.Connect();

        // create an xterm shell
        var Shell = client.CreateShellStream("xterm", 80, 24, 800, 600, 1024);

        // for reading & writing to the shell
        var reader = new StreamReader(Shell);
        var writer = new StreamWriter(Shell);

        // ....

        client.Disconnect();
    }

私钥文件格式

请注意,您的私钥文件必须采用OpenSSH格式。如果您在Notepad ++中打开密钥文件,则第一行必须有“BEGIN RSA PRIVATE KEY”。

如果没有,请使用puttygen将您的私钥文件转换为OpenSSH格式。

  1. 在puttygen中打开私钥文件
  2. 转到“Conversions”菜单并选择“导出OpenSSH密钥”。
  3. 将新密钥保存到文件中并使用它。

0

谢谢你的提示!但我正在寻找一个免费且开源的库。 - user1646933

-1

我们的SecureBlackbox可以加载和保存所有常见格式的SSH密钥,并支持加密密钥文件。不确定其他库是否具备此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接