SFTP verzenden en ontvangen in .NET

Aanmaakdatum van pagina :

milieu

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

※ Het werkt in andere versies, maar het is onbevestigd

Eerst

Maak een clientprogramma voor SFTP om bestanden te verzenden en te ontvangen in .NET Framework (.NET Core). SFTP-gerelateerde programma's zijn niet standaard in .NET. We zullen de bibliotheekvan derdengebruiken SSH.NET .

SSH.NET is onlangs niet bijgewerkt, maar het is relatief eenvoudig om het programma te implementeren. Ik denk niet dat er veel nadelen zijn aan het gebruik ervan, omdat het ook .NET Standard ondersteunt.

Deze keer verzenden en ontvangen we bestanden via SFTP in het .NET Core-consoleproject. SSH.NET ondersteunt veel frameworks, zodat het kan worden geïmplementeerd in andere projecten dan de console.

Voorbereiding vooraf

  • Visual Studio moet zijn geïnstalleerd
  • U hebt een SFTP-server om sftp-gedrag te controleren
  • Een account hebben waarmee u verbinding kunt maken met SFTP
  • Wachtwoordverificatie inschakelen op sftp-servers bij het uitvoeren van wachtwoordverificatie
  • Wanneer u verificatie met een openbare sleutel uitvoert, plaatst u de openbare sleutel op de SFTP-server en moet u een persoonlijke sleutel (OpenSSH-indeling) in de client laden.

Installeer SSH.NET

Maak een .NET Core-consoleproject in Visual Studio. De projectnaam is SshNetBasic.

Haalt de "SSH.NET" van NuGet.

image

image

image

image

Het pakket is toegevoegd.

image

Wachtwoordverificatie

Voor wachtwoordverificatie gebruikt u de klasse PasswordAuthenticationMethod om een gebruikersnaam en wachtwoord in te stellen.

Stel de klasse ConnectionInfo in met een hostnaam (zoals sorceryforce.net of 192.168.0.1) en de verificatiemethode die u zojuist hebt gegenereerd. Geef het door aan de klasse "SftpClient".

De methode SftpClient.Connect maakt de verbinding daadwerkelijk en als het lukt, wordt een uitzondering gemaakt voor de volgende bewerking en, in geval van een storing. Verbreek de verbinding met de methode Verbinding verbreken.

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

Verificatie met openbare sleutel

Plaats de persoonlijke sleutel in een willekeurige map op de client. Zoals u kunt zien in installatietips, als u uw persoonlijke sleutel in een map plaatst die toegang heeft tot andere accounts, SFTP-verwerking kan mislukken. Zorg ervoor dat u toegang hebt tot het account dat u uitvoert of alleen beheerders.

image

Wat verschilt van wachtwoordverificatie is dat de verificatiemethode is gewijzigd in PrivateKeyAuthenticationMethod.

Geef "PrivateKeyFile" op als tweede argument en geef het bestandspad en de wachtwoordzin (indien ingesteld) op waar de persoonlijke sleutel wordt geplaatst.

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

Bestanden verzenden en ontvangen met SFTP

Verzend en ontvang bestanden door de verzend- en ontvangstcode te schrijven nadat u verbinding hebt gemaakt met de server met de methode SftpClient.Connect. Wat we doen is "lokale bestanden lezen en naar SFTP-servers sturen" en "bestanden downloaden van SFTP-servers en ze lokaal opslaan". Het kan worden geïmplementeerd zonder bijzonder moeilijke taken te schrijven.

U kunt japanse bestandsnamen zonder problemen verzenden en ontvangen.

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

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

Samenvatting

SSH.NET maakt het gemakkelijker om SFTP te verzenden en te ontvangen. Het kan langer duren om een testomgeving voor te bereiden dan om een programma te implementeren.

Sftp doet in wezen hetzelfde als FTP en het meeste werk wordt geïmplementeerd in SSH.NET. Deze bibliotheek wordt aanbevolen als u SFTP programmly wilt gebruiken.