Odesílání a přijímání SFTP v .NET
ž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.
Balíček byl přidán.
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.
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ě.