Odosielanie a prijímanie SFTP v .NET

Dátum vytvorenia strany :

životné prostredie

Vizuálne štúdio
  • Komunita vizuálnych štúdií 2017
  • Komunita vizuálnych štúdií 2019
.NET Jadro
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Funguje v iných verziách, ale je nepotvrdený

Najskôr

Vytvorte klientsky program pre SFTP na odosielanie a prijímanie súborov v .NET Framework (.NET Core). Programy súvisiace s SFTP nie sú štandardné v .NET. Budeme používať knižnicutretích stránSSH.NET.

SSH.NET nebola nedávno aktualizovaná, ale je pomerne ľahké implementovať program. Nemyslím si, že existuje veľa nevýhod jeho používania, pretože tiež podporuje .NET Standard.

Tentokrát budeme odosielať a prijímať súbory od SFTP v projekte konzoly .NET Core. SSH.NET podporuje mnoho rámcov, takže môže byť implementovaný v iných projektoch ako konzola.

Príprava vopred

  • Visual Studio musí byť nainštalované
  • Máte server SFTP na overenie správania sftp
  • Mať účet, ku ktorému sa môžete pripojiť pomocou SFTP
  • Povolenie overovania hesla na serveroch sftp pri overovaní heslom
  • Pri overovaní verejného kľúča umiestnite verejný kľúč na server SFTP a nechajte si načítať súkromný kľúč (formát OpenSSH), ktorý sa má načítať do klienta.

Inštalácia SSH.NET

Vytvorte projekt konzoly .NET Core vo Visual Studio. Názov projektu je SshNetBasic.

Dostane "SSH.NET" od NuGet.

image

image

image

image

Balík bol pridaný.

image

Overenie heslom

Na overenie heslom použite triedu PasswordAuthenticationMethod na nastavenie používateľského mena a hesla.

Nastavte triedu ConnectionInfo s názvom hostiteľa (napríklad sorceryforce.net alebo 192.168.0.1) a overovacímmethodom, ktorý ste práve vygenerovali. Preneste ho do triedy "SftpClient".

Metóda SftpClient.Connect skutočne vytvára pripojenie, a ak uspeje, hodí výnimku z ďalšej operácie a v prípade zlyhania. Odpojte sa od metódy odpojenie.

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

Overenie verejného kľúča

Umiestnite súkromný kľúč do ľubovoľného priečinka klienta. Ako vidíte v tipoch na nastavenie, ak umiestnite súkromný kľúč do priečinka, ktorý má prístup k iným účtom, Spracovanie SFTP môže zlyhať. Uistite sa, že máte prístup k prevádzkovanému kontu alebo iba k správcom.

image

Čo sa líši od overovania heslom, je to, že metóda overovania sa zmenila na PrivateKeyAuthenticationMethod.

Zadajte "PrivateKeyFile" ako druhý argument a zadajte cestu k súboru a prístupovú frázu (ak je nastavená), na miesto, kde je umiestnený súkromný kľúč.

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

Odosielanie a prijímanie súborov pomocou SFTP

Odosielajte a prijímajte súbory napísaním kódu odosielania a prijímania po pripojení na server metódou SftpClient.Connect. To, čo robíme, je "čítať lokálne súbory a posielať ich na servery SFTP" a "sťahovať súbory zo serverov SFTP a ukladať ich lokálne". Dá sa realizovať bez písania obzvlášť ťažkých úloh.

Môžete bez problémov odosielať a prijímať názvy japonských súborov.

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

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

Súhrn

SSH.NET uľahčuje odosielanie a prijímanie SFTP. Príprava testovacieho prostredia môže trvať dlhšie ako realizácia programu.

Sftp robí v podstate to isté ako FTP a väčšina práce je implementovaná v SSH.NET. Táto knižnica sa odporúča, ak chcete používať program SFTP.