如何解决使用字符串中的密钥通过 SSH.NET 对 SFTP 进行身份验证时出现“无效的私钥文件”
我有一个程序,我想连接到 SFTP 主机并推/拉文件。主机需要私钥才能连接。使用这些帖子作为指导:
- "Renci.SshNet.Common.SshException: Invalid private key file" when loading SSH private key from configuration string using SSH.NET 和
- Using "OPENSSH" private key file in string with SSH.NET in C# fails with "invalid private key file"
我做了以下事情:
- 使用给定的 .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,bPw);
}
return sftp;
我的代码是否有问题,或者我生成 OpenSSH 格式的密钥的方式可能不正确?
我注意到在其他示例键字符串中,它们不包括以下内容:
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,15BEAB6C0B73F39A
解决方法
它可能是多行字符串中的前导空格。他们不可能在那里。
删除它们。
var keyStr = @"-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,15BEAB6C0B73F39A
***private key***
-----END RSA PRIVATE KEY-----";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。