Send og modtag SFTP i .NET

Dato for oprettelse af side :

miljø

Visual Studio
  • Visual Studio Community 2017
  • Visual Studio Community 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Det virker i andre versioner, men det er ubekræftet

Først

Opret et klientprogram, som SFTP kan sende og modtage filer i .NET Framework (.NET Core). SFTP-relaterede programmer er ikke standard i .NET. Vi brugertredjepartsbiblioteketSSH.NET .

SSH.NET er ikke blevet opdateret for nylig, men det er relativt nemt at implementere programmet. Jeg tror ikke, der er mange ulemper ved at bruge det, fordi det også understøtter .NET Standard.

Denne gang sender og modtager vi filer fra SFTP i .NET Core-konsolprojektet. SSH.NET understøtter mange rammer, så det kan implementeres i andre projekter end konsollen.

Forberedelse på forhånd

  • Visual Studio skal være installeret
  • Du har en SFTP-server til at kontrollere sftp-funktionsmåden
  • Har en konto, som du kan oprette forbindelse til med SFTP
  • Aktiver adgangskodegodkendelse på sftp-servere, når der udføres adgangskodegodkendelse
  • Når du udfører godkendelse af offentlige nøgler, skal du placere den offentlige nøgle på SFTP-serveren og have en privat nøgle (OpenSSH-format), der skal indlæses i klienten.

Installer SSH.NET

Opret et .NET Core-konsolprojekt i Visual Studio. Projektnavnet er SshNetBasic.

Får "SSH.NET" fra NuGet.

image

image

image

image

Pakken er blevet tilføjet.

image

Godkendelse af adgangskode

Brug klassen PasswordAuthenticationMethod til at angive et brugernavn og en adgangskode til godkendelse af adgangskoder.

Angiv klassen ConnectionInfo med et værtsnavn (f.eks. sorceryforce.net eller 192.168.0.1) og den godkendelsesmetode, du lige har genereret. Send det til "SftpClient" klasse.

Metoden SftpClient.Connect opretter faktisk forbindelsen, og hvis det lykkes, indeholder den en undtagelse fra den næste handling og i tilfælde af fejl. Afbryd forbindelsen til metoden 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();

Godkendelse af offentlig nøgle

Placer den private nøgle i en mappe på klienten. Som du kan se i opsætningstips, hvis du placerer din private nøgle i en mappe, der kan få adgang til andre konti, SFTP-behandlingen kan mislykkes. Sørg for at sikre dig, at du har adgang til den konto, du kører, eller kun administratorer.

image

Det, der adskiller sig fra adgangskodegodkendelse, er, at godkendelsesmetoden er ændret til PrivateKeyAuthenticationMethod.

Angiv "PrivateKeyFile" som det andet argument, og angiv den filsti og adgangsudtryk (hvis det er angivet), hvor den private nøgle er placeret.

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

Sende og modtage filer med SFTP

Send og modtag filer ved at skrive send og modtag-koden, når du har oprettet forbindelse til serveren med metoden SftpClient.Connect . Hvad vi gør, er "læse lokale filer og sende dem til SFTP servere" og "downloade filer fra SFTP servere og gemme dem lokalt". Det kan implementeres uden at skrive særligt vanskelige opgaver.

Du kan uden problemer sende og modtage japanske filnavne.

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

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

Resumé

SSH.NET gør det nemmere at sende og modtage SFTP. Det kan tage længere tid at forberede et testmiljø end at implementere et program.

Sftp gør stort set det samme som FTP, og det meste af arbejdet er implementeret i SSH.NET. Dette bibliotek anbefales, hvis du vil bruge SFTP-programmet.