Отправка и получение 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.
Пакет добавлен.
Аутентификация по паролю
Для проверки подлинности по паролю используйте класс 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 может завершиться ошибкой. Убедитесь, что у вас есть доступ к учетной записи, которую вы используете, или только к администраторам.
Отличие аутентификации по паролю заключается в том, что метод проверки подлинности изменился на 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 программно.