SFTP saatmine ja vastuvõtmine .NET-is

Lehe loomise kuupäev :

keskkond

Visuaalstuudio
  • Visuaalstuudio kogukond 2017
  • Visuaalstuudio kogukond 2019
.NET Tuum
  • 3.1
.NET-i raamistik
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ See töötab teistes versioonides, kuid see on kinnitamata

Alguses

Looge klientprogramm SFTP saata ja vastu võtta faile .NET Frameworki (.NET Core). SFTP-ga seotud programmid pole .NET-is standardsed. Kasutame kolmandaosapooleraamatukogu SSH.NET .

SSH.NET ei ole hiljuti uuendatud, kuid programmi rakendamine on suhteliselt lihtne. Ma ei usu, et selle kasutamisel on palju puudusi, sest see toetab ka .NET Standardit.

Seekord saadame ja võtame vastu faile SFTP .NET Core konsooli projekti. SSH.NET toetab paljusid raamistikke, nii et seda saab rakendada muudes projektides kui konsool.

Eelnev ettevalmistamine

  • Visual Studio peab olema installitud
  • Teil on SFTP server kontrollida sftp käitumist
  • Teil on konto, millega saate SFTP-ga ühenduse luua
  • Parooliautentimise lubamine sftp-serverites parooliautentimise teostamisel
  • Avaliku võtme autentimisel asetage avalik võti SFTP-serverisse ja laadige privaatvõti (OpenSSH-vorming).

Installi SSH.NET

Looge Visual Studios .NET Core konsooliprojekt. Projekti nimi on SshNetBasic.

Saab NuGetilt "SSH.NET".

image

image

image

image

Pakett on lisatud.

image

Parooli autentimine

Parooli autentimiseks kasutage parooliauthenticationMethod klassi kasutajanime ja parooli seadmiseks.

Seadke klassi ConnectionInfo hostinimega (nt sorceryforce.net või 192.168.0.1) ja äsja loodud autentimise meetodiga. Edastage see klassile "SftpClient".

SftpClient.Connect meetod tegelikult teeb ühenduse, ja kui see õnnestub, see viskab erandi järgmise operatsiooni ja rikke korral. Katkesta ühendus meetodiga Katkesta ühendus.

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

Avaliku võtme autentimine

Asetage privaatvõti kliendi mis tahes kausta. Nagu näete häälestusnäpunäidetes, kui asetate oma privaatvõtme kausta, mis pääseb juurde teistele kontodele, SFTP töötlemine võib nurjuda. Veenduge, et teil on juurdepääs teie hallatavale kontole või ainult administraatoritele.

image

Parooli autentimisest erineb see, et autentimismeetod on muutunud PrivateKeyAuthenticationMethod.

Määrake teise argumendina "PrivateKeyFile" ning määrake faili tee ja parool (kui see on määratud), kuhu privaatvõti paigutatakse.

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

Failide saatmine ja vastuvõtmine SFTP abil

Failide saatmiseks ja vastuvõtmiseks kirjutage saatmis- ja vastuvõtukood pärast serveriga ühenduse loomist meetodiga SftpClient.Connect. Mida me teeme, on "lugeda kohalikke faile ja saata need SFTP serveritesse" ja "alla laadida faile SFTP serveritest ja salvestada need kohalikult". Seda saab rakendada ilma eriti keerulisi ülesandeid kirjutamata.

Jaapanikeelseid failinimesid saate saata ja vastu võtta probleemideta.

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

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

Kokkuvõte

SSH.NET lihtsustab SFTP saatmist ja vastuvõttu. Testikeskkonna ettevalmistamine võib võtta kauem aega kui programmi rakendamine.

Sftp teeb sisuliselt sama asja nagu FTP ja suurem osa tööst tehakse SSH.NET. See teek on soovitatav, kui soovite SFTP-d programmiliselt kasutada.