Отправка и получение SFTP в .NET

Дата создания страницы :

окружающая среда

Visual Studio
  • Сообщество Visual Studio 2017
  • Сообщество Visual Studio 2019
.NET Core
  • 3.1
Платформа .NET Framework
  • 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 фактически устанавливает соединение, и если оно успешно выполняется, он выдает исключение для следующей операции и, в случае сбоя. Отключитесь с помощью метода Disconnect.

// 必要な情報を設定する
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 программно.