gpt4 book ai didi

c# - 使用 SSH.NET 从配置字符串加载 SSH 私钥时出现 "Renci.SshNet.Common.SshException: Invalid private key file"

转载 作者:行者123 更新时间:2023-12-01 16:13:50 30 4
gpt4 key购买 nike

我正在尝试使用 SFTP 将文件发送到某个服务器。在此过程中我遇到了异常

Renci.SshNet.Common.SshException: Invalid private key file. at Renci.SshNet.PrivateKeyFile.Open(Stream privateKey, String passPhrase)

使用 PuTTYgen 生成 key ,下面显示的是私钥文件的示例格式。它既有公钥又有私钥。

PuTTY-User-Key-File-2: ssh-rsa  
Encryption:none
comment: rsa-key-20190327
Public-Lines: 4
AAAAB.....
......
Private-Lines: 8
AAAAgQ......
.......
Private-MAC: 54901783....

我从配置文件中的上述文件复制了私钥部分,并在代码中作为 SftpKey 访问它。

获得上述 key 的 OpenSSH 格式,如下所示

------BEGIN RSA PRIVATE KEY-----  
MIIE....
.......
------END RSA PRIVATE KEY-------

我只复制了上述文件中的关键部分,并复制到我的配置文件中并运行我的代码。问题没有解决。

下面是我用于 SFTP 上传的代码

var fileLength = data.Length;

var keyStr = ConfigurationManager.ConnectionStrings["SftpKey"].ConnectionString;
using (var keystrm = new MemoryStream(Convert.FromBase64String(keyStr)))
{
var privateKey = new PrivateKeyFile(keystrm);
using (var ftp = new SftpClient(_ftpServer, _ftpUser, new[] { privateKey }))
{
ftp.ErrorOccurred += ErrorOccurred;
ftp.Connect();
ftp.ChangeDirectory(_ftpPath);
using (var dataStream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
ftp.UploadFile(dataStream, Path.GetFileName(message.MessageId), true,
(length) => result = fileLength == (int)length);
}
ftp.Disconnect();
}
}

代码有什么问题或者可能是什么问题吗?非常感谢任何帮助。

最佳答案

由于这是该错误消息的最佳答案,因此我认为值得对原始问题中的一个点进行扩展 - 转换为 OpenSSH 格式 key 。

Renci.SshNet 无法使用以下开头的 PuTTY key :

PuTTY-User-Key-File-2: ssh-rsa

您可以使用puttygen.exe转换为OpenSSH格式

  1. 在 puttygen.exe 中加载 key 文件
  2. 转换> 导出 OpenSSH key (不是“强制新文件格式”选项)

这将创建一个以以下内容开头的 key :

-----BEGIN RSA PRIVATE KEY-----

这样就可以了

关于c# - 使用 SSH.NET 从配置字符串加载 SSH 私钥时出现 "Renci.SshNet.Common.SshException: Invalid private key file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378001/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com