【问题标题】:SSH library with support for passphrase rsa privatekeys支持密码短语 rsa 私钥的 SSH 库
【发布时间】:2017-01-30 17:14:50
【问题描述】:

我目前正在开发一个小型 Visual C# 应用程序,我在其中 需要一个 SSH 库。 我已经尝试过 DotNetSSH、Renci.SshNet 和 SharpSsh。 Granados SSH 库的文档记录很差(至少我几乎什么也没找到), 所以我跳过了这个。

所有这些库都有一个大问题(恕我直言):它们无法打开 SSH 私有 带有密码的密钥。

Renci.SshNet 不支持 AES。 DotNetSSH 和 SharpSsh 使用 jsch(java ssh 库)作为基础,似乎有一个 错误(?),因此它不会解密私钥并不断询问密码。

使用用户名+密码和没有密码短语的私钥连接效果很好 使用 SharpSsh。

有人遇到过同样的问题吗? 或者是否有另一个支持“RSA 私钥和密码”的 C# SSH 库?

提前谢谢

【问题讨论】:

标签: c# windows ssh


【解决方案1】:

我已成功使用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. 转到“转换”菜单并选择“导出 OpenSSH 密钥”。
  3. 将该新密钥保存到文件中并使用它。

【讨论】:

    【解决方案2】:

    也许Chilkat SSH component 可以帮助你。

    但它不是免费的。

    【讨论】:

    • 感谢您的提示!但我正在寻找一个免费的开源库。
    【解决方案3】:

    我们的SecureBlackbox 以所有常见格式加载和保存 SSH 密钥,并支持加密的密钥文件。不确定是否有任何其他图书馆这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      相关资源
      最近更新 更多