我正在尝试使用SFTP将文件发送到某个服务器。 在此过程中,我遇到了异常
Renci.SshNet.Common.SshException:无效的私钥文件。 在Renci.SshNet.PrivateKeyFile.Open(Stream privateKey,String passPhrase)中。
我使用PuTTYgen生成密钥,下面显示的是私钥文件的示例格式。 它具有公钥和私钥。
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
访问。
得到了一个类似于以下格式的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();
}
}
这段代码有什么问题或者可能会出现什么问题吗?非常感谢任何帮助。