Надсилання й отримання SFTP у .NET

Дата створення сторінки :

середовище

Візуальна студія
  • Спільнота візуальної студії 2017
  • Спільнота візуальної студії 2019
.NET Core
  • 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 підтримує багато фреймворків, тому він може бути реалізований в проектах, відмінних від консолі.

Підготовка заздалегідь

  • Візуальна студія повинна бути встановлена
  • У вас є сервер 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 програмою.