Odesílání a přijímání SFTP v .NET

Datum vytvoření stránky :

životní prostředí

Visual Studio
  • Komunita sady Visual Studio 2017
  • Visual Studio Community 2019
Jádro .NET
  • 3.1
Rozhraní .NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Funguje v jiných verzích, ale je nepotvrzené

Nejprve

Vytvořte klientský program pro SFTP pro odesílání a přijímání souborů v rozhraní .NET Framework (.NET Core). Programy související se SFTP nejsou v .NET standardní. Knihovnutřetích stranpoužijeme SSH.NET .

SSH.NET nebyla nedávno aktualizována, ale implementace programu je poměrně snadná. Nemyslím si, že existuje mnoho nevýhod jeho použití, protože také podporuje .NET Standard.

Tentokrát budeme odesílat a přijímat soubory od SFTP v projektu konzoly .NET Core. SSH.NET podporuje mnoho architektur, takže je lze implementovat do jiných projektů než v konzoli.

Příprava předem

  • Visual Studio musí být nainstalováno
  • Máte server SFTP pro ověření chování sftp
  • Mít účet, ke kterému se můžete připojit pomocí SFTP
  • Povolení ověřování hesel na serverech sftp při ověřování heslem
  • Při ověřování veřejného klíče umístěte veřejný klíč na server SFTP a načtěte soukromý klíč (formát OpenSSH), který se má načíst do klienta.

Instalace SSH.NET

Vytvořte projekt konzoly .NET Core v sadě Visual Studio. Název projektu je SshNetBasic.

Získá "SSH.NET" od NuGet.

image

image

image

image

Balíček byl přidán.

image

Ověřování heslem

Pro ověření heslem nastavte uživatelské jméno a heslo pomocí třídy PasswordAuthenticationMethod.

Nastavte třídu ConnectionInfo s názvem hostitele (například sorceryforce.net nebo 192.168.0.1) a ověřováním, které jste právě vygenerovali. Předejte ji do třídy "SftpClient".

Metoda SftpClient.Connect skutečně provede připojení a pokud uspěje, vyvolá výjimku z další operace a v případě selhání. Odpojte se od 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();

Ověřování veřejného klíče

Umístěte soukromý klíč do libovolné složky v klientovi. Jak vidíte v tipech pro nastavení, pokud umístíte svůj soukromý klíč do složky, která má přístup k jiným účtům, Zpracování SFTP může selhat. Ujistěte se, že máte přístup k účtu, který provozujete, nebo jenom ke správcům.

image

Co se liší od ověřování heslem, je to, že metoda ověřování se změnila na PrivateKeyAuthenticationMethod.

Zadejte "PrivateKeyFile" jako druhý argument a zadejte cestu k souboru a přístupové heslo (pokud je nastaveno), kde je umístěn soukromý klíč.

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

Odesílání a přijímání souborů pomocí SFTP

Odesílejte a přijímejte soubory zápisem kódu pro odesílání a přijímání po připojení k serveru metodou SftpClient.Connect. To, co děláme, je "číst místní soubory a posílat je na servery SFTP" a "stahovat soubory ze serverů SFTP a ukládat je lokálně". Může být implementován bez psaní zvláště obtížných úkolů.

Japonské názvy souborů můžete bez problémů odesílat a přijímat.

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

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

Shrnutí

SSH.NET usnadňuje odesílání a přijímání SFTP. Příprava testovacího prostředí může trvat déle než implementace programu.

Sftp dělá v podstatě totéž jako FTP a většina práce je implementována v SSH.NET. Tato knihovna se doporučuje, pokud chcete používat SFTP programově.