Wysyłanie i odbieranie protokołu SFTP w platformie .NET

Data utworzenia strony :

środowisko

Visual Studio
  • Społeczność programu Visual Studio 2017
  • Społeczność programu Visual Studio 2019
Platforma .NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Działa w innych wersjach, ale jest niepotwierdzony

Na początku

Utwórz program kliencki dla protokołu SFTP do wysyłania i odbierania plików w programie .NET Framework (.NET Core). Programy sfTP nie są standardem w programie .NET. Będziemy korzystać zbiblioteki innej firmySSH.NET .

SSH.NET nie został ostatnio zaktualizowany, ale stosunkowo łatwo jest wdrożyć program. Nie sądzę, że istnieje wiele wad korzystania z niego, ponieważ obsługuje on również .NET Standard.

Tym razem będziemy wysyłać i odbierać pliki przez SFTP w projekcie konsoli .NET Core. SSH.NET obsługuje wiele frameworków, dzięki czemu może być implementowany w projektach innych niż konsola.

Przygotowanie z wyprzedzeniem

  • Program Visual Studio musi być zainstalowany
  • Masz serwer SFTP do weryfikacji zachowania sftp
  • Mieć konto, z którym możesz się połączyć za pomocą SFTP
  • Włączanie uwierzytelniania hasłem na serwerach sftp podczas uwierzytelniania hasłem
  • Podczas uwierzytelniania za pomocą klucza publicznego umieść klucz publiczny na serwerze SFTP i miej klucz prywatny (format OpenSSH), który ma zostać załadowany do klienta.

Zainstaluj SSH.NET

Utwórz projekt konsoli .NET Core w programie Visual Studio. Nazwa projektu to SshNetBasic.

Pobiera "SSH.NET" z NuGet.

image

image

image

image

Pakiet został dodany.

image

Uwierzytelnianie hasłem

Do uwierzytelniania hasłem użyj klasy PasswordAuthenticationMethod, aby ustawić nazwę użytkownika i hasło.

Ustaw klasę ConnectionInfo z nazwą hosta (na przykład sorceryforce.net lub 192.168.0.1) i właśnie wygenerowanym metodą uwierzytelniania. Przekaż go do klasy "SftpClient".

Metoda SftpClient.Connect faktycznie tworzy połączenie, a jeśli się powiedzie, zgłasza wyjątek do następnej operacji, aw przypadku niepowodzenia. Rozłącz się za pomocą metody 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();

Uwierzytelnianie za pomocą klucza publicznego

Umieść klucz prywatny w dowolnym folderze na kliencie. Jak widać w wskazówkach dotyczących konfiguracji, jeśli umieścisz swój klucz prywatny w folderze, który może uzyskać dostęp do innych kont, Przetwarzanie SFTP może zakończyć się niepowodzeniem. Upewnij się, że masz dostęp do uruchomionego konta lub tylko do administratorów.

image

Czym różni się od uwierzytelniania hasłem, metoda uwierzytelniania została zmieniona na PrivateKeyAuthenticationMethod.

Określ "PrivateKeyFile" jako drugi argument i określ ścieżkę pliku oraz hasło (jeśli jest ustawione), w którym znajduje się klucz prywatny.

// 必要な情報を設定する
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();

Wysyłanie i odbieranie plików za pomocą protokołu SFTP

Wysyłanie i odbieranie plików przez zapisanie kodu wysyłania i odbierania po nawiązaniu połączenia z serwerem za pomocą metody SftpClient.Connect. To, co robimy, to "odczytywanie plików lokalnych i wysyłanie ich na serwery SFTP" oraz "pobieranie plików z serwerów SFTP i zapisywanie ich lokalnie". Można go wdrożyć bez pisania szczególnie trudnych zadań.

Możesz wysyłać i odbierać japońskie nazwy plików bez problemów.

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

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();

Streszczenie

SSH.NET ułatwia wysyłanie i odbieranie sfTP. Przygotowanie środowiska testowego może potrwać dłużej niż wdrożenie programu.

Sftp robi zasadniczo to samo, co FTP, a większość pracy jest realizowana w SSH.NET. Ta biblioteka jest zalecana, jeśli chcesz używać SFTP programowo.