В руководстве это не указано, но некоторые поиски в Google выдают страницы начала десятилетия (например, это), предполагая, что это, по крайней мере, раньше имело место. У нас есть такой код:
var privateKeyAuthenticationMethod =
new PrivateKeyAuthenticationMethod(userName, new PrivateKeyFile(privateKeyLocation));
var connInfo =
new ConnectionInfo(
ftpSettings.HostAddress, ftpSettings.UserName, privateKeyAuthenticationMethod);
using (var client = new SftpClient(connInfo))
{
client.Connect();
client.UploadFile(memStreamData, destination);
}
Это подключается к закрытому ключу, который мы успешно использовали через SCP2 (Secure Copy 2, как подробно описано здесь) - это 2048 DSA, который указан как действительный в документации SSH.NET. Ключ использует формат ssh.com, например:
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
Subject: <FID name>
Comment: "2048-bit dsa, <FID name>@<Server name>, Mon Apr 24 201\
7 15:49:36 +0100"
<ENCRYPTED KEY>
---- END SSH2 ENCRYPTED PRIVATE KEY ----
Однако в части обработки закрытого ключа SSH.NET есть Regex
, который не соответствует нашему закрытому ключу и поэтому выдает исключение:
ERROR 2017-05-10 15:31:43 UTC [T: 474] – Invalid private key file.
ERROR 2017-05-10 15:31:43 UTC [T: 474] – at Renci.SshNet.PrivateKeyFile.Open(Stream privateKey, String passPhrase)
Однако он совпадет, если мы преобразуем ключ в формат OpenSSH, но это не обязательно то, что мы можем использовать в производстве из-за бизнес-ограничений.
Кто-нибудь точно знает, какие ограничения на формат закрытого ключа для SSH.NET, пожалуйста? Мы не уверены, нужно ли нам на этот раз отказаться от SSH.NET для какой-то другой библиотеки-оболочки SFTP, написать свою собственную или что-то в этом роде.