使用字符串中的密钥通过 SSH.NET 对 SFTP 进行身份验证时出现“无效的私钥文件”

时间:2021-05-20 18:32:33

标签: c# ssh sftp ssh.net

我有一个程序,我想连接到 SFTP 主机并推/拉文件。主机需要私钥才能连接。使用这些帖子作为指导:

我做了以下事情:

  • 使用给定的 .ppk 文件,我使用 PuTTYgen 将其转换为 OpenSSH 格式
  • 从生成的私钥中,我将其复制到我的代码中,并尝试用它创建一个 SftpClient

以下是我的代码:

SftpClient sftp = null;

if (bHost.Equals("sftp.sftpHost.com"))
{
    var keyStr = @"-----BEGIN RSA PRIVATE KEY-----
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,15BEAB6C0B73F39A

    ***private key***
    -----END RSA PRIVATE KEY-----";

    using (var keystrm = new MemoryStream(Encoding.UTF8.GetBytes(keyStr)))
    {
        var privateKey = new PrivateKeyFile(keystrm, "passPhrase");
        sftp = new SftpClient(bHost, bUser, new[] { privateKey });
    }
} else
{
    sftp = new SftpClient(bHost, bPort, bUser, bPw);
}

return sftp;
                   

我的代码是否有问题,或者我生成 OpenSSH 格式的密钥的方式可能不正确?

我注意到在其他示例键字符串中,它们不包括以下内容:

Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,15BEAB6C0B73F39A

1 个答案:

答案 0 :(得分:1)

它可能是多行字符串中的前导空格。他们不可能在那里。

删除它们。

    var keyStr = @"-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,15BEAB6C0B73F39A

***private key***
-----END RSA PRIVATE KEY-----";