Я пытаюсь отправить файл на какой-либо сервер, используя SFTP. Во время этого процесса я получаю исключение
Renci.SshNet.Common.SshException: неверный файл закрытого ключа. at Renci.SshNet.PrivateKeyFile.Open (Поток 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();
}
}
Что-то не так с кодом или в чем может быть проблема? Любая помощь очень ценится.