Изпращане и получаване на SFTP в .NET

Дата на създаване на страница :

околна среда

Визуално студио
  • Визуална студио общност 2017
  • Общност на визуално студио 2019
.NET Ядро
  • 3.1
.NET Рамка
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

⿥ Тя работи в други версии, но е непотвърдена

Отначало

Създаване на клиентска програма за SFTP за изпращане и получаване на файлове в .NET Framework (.NET Core). Програмите, свързани с SFTP, не са стандартни в .NET. Ще използваме библиотеката натрети страниSSH.NET .

SSH.NET не е актуализиран наскоро, но е сравнително лесно да се реализира програмата. Не мисля, че има много недостатъци на използването му, защото тя също поддържа .NET Standard.

Този път ще изпращаме и получаваме файлове от SFTP в проекта на конзолата .NET Core. SSH.NET подкрепя много рамки, така че може да се изпълнява в проекти, различни от конзолата.

Подготовка предварително

  • Visual Studio трябва да се инсталира
  • Имате SFTP сървър за проверка на поведението на SFTP
  • Разполагайте с акаунт, с който можете да се свържете с SFTP
  • Разрешаване на удостоверяване с парола на SFTP сървъри при извършване на удостоверяване с парола
  • Когато извършвате удостоверяване с публичен ключ, поставете публичния ключ на SFTP сървъра и разполагайте с частен ключ (OpenSSH формат), който да се зареди в клиента.

Инсталиране на SSH.NET

Създаване на проект на конзола .NET Core в Visual Studio. Името на проекта е SshNetBasic.

Получава "SSH.NET" от NuGet.

image

image

image

image

Пакетът е добавен.

image

Удостоверяване с парола

За удостоверяване с парола използвайте класа PasswordAuthenticationMethod, за да зададете потребителско име и парола.

Задайте класа ConnectionInfo с име на хост (например sorceryforce.net или 192.168.0.1) и метода за удостоверяване, който току-що генерирахте. Подай го на клас "SftpClient".

Методът SftpClient.Connect всъщност прави връзката и ако успее, той хвърля изключение от следващата операция и, в случай на повреда. Прекъсване на връзката с метода Прекъсване на връзката.

// 必要な情報を設定する
var host = "";
var userName = "";
var password = "";

// 認証メソッドを作成
var authMethod = new Renci.SshNet.PasswordAuthenticationMethod(userName, password);

// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);

// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);

// 接続。失敗した場合は例外が発生
client.Connect();

// 切断
client.Disconnect();

Удостоверяване с публичен ключ

Поставете частния ключ във всяка папка на клиента. Както можете да видите в съветите за настройка, ако поставите личния си ключ в папка, която има достъп до други профили, SFTP обработката може да е неуспешна. Не забравяйте да се уверите, че имате достъп до профила, който изпълнявате, или само администратори.

image

Различното от удостоверяването с парола е, че методът на удостоверяване е променен на PrivateKeyAuthenticationMethod.

Задайте "PrivateKeyFile" като втори аргумент и задайте пътя на файла и фразата за достъп (ако е зададен), където е поставен частният ключ.

// 必要な情報を設定する
var host = "";
var userName = "";
var passPhrase = "";
var keyFilePath = @"C:\xxxxxxxxxx\id_rsa";

// 認証メソッドを作成
var authMethod = new Renci.SshNet.PrivateKeyAuthenticationMethod(userName,
                      new Renci.SshNet.PrivateKeyFile(keyFilePath, passPhrase));

// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);

// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);

// 接続。失敗した場合は例外が発生
client.Connect();

// 切断
client.Disconnect();

Изпращане и получаване на файлове с SFTP

Изпращайте и получавайте файлове, като пишете кода за изпращане и получаване след свързване със сървъра с метода SftpClient.Connect. Това, което правим, е "прочетете локални файлове и ги изпратете на SFTP сървъри" и "изтегляне на файлове от SFTP сървъри и да ги запишете локално". Тя може да бъде изпълнена, без да се пишат особено трудни задачи.

Можете да изпращате и получавате имена на японски файлове без проблеми.

/* ---------------- 中略 ------------------- */

var sendFilePath = @"C:\xxxxxxxxxxxx\テスト.txt";
var reseiveFilePath = @"C:\xxxxxxxxxxxx\テスト2.txt";

/* ---------------- 中略 ------------------- */

// 接続。失敗した場合は例外が発生
client.Connect();

// ファイルのアップロード(上書き)
using var sendStream = File.OpenRead(sendFilePath);
client.UploadFile(sendStream, Path.GetFileName(sendFilePath), true);

// ファイルのダウンロード(上書き)
using var reseiveStream = File.OpenWrite(reseiveFilePath);
client.DownloadFile(Path.GetFileName(sendFilePath), reseiveStream);

// 切断
client.Disconnect();

Резюме

SSH.NET улеснява изпращането и получаването на SFTP. Може да отнеме повече време, за да подготвите тестова среда, отколкото да внедрите програма.

Sftp прави по същество същото нещо като FTP, и по-голямата част от работата се изпълнява в SSH.NET. Тази библиотека се препоръчва, ако искате да използвате SFTP програмно.