Trimiteți și primiți SFTP în .NET

Data creării paginii :

mediu

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

※ Funcționează în alte versiuni, dar este neconfirmat

La început

Creați un program client pentru SFTP pentru a trimite și primi fișiere în .NET Framework (.NET Core). Programele legate de SFTP nu sunt standard în .NET. Vom folosi bibliotecaterță parteSSH.NET .

SSH.NET nu a fost actualizat recent, dar este relativ ușor să implementați programul. Nu cred că există multe dezavantaje ale utilizării acestuia, deoarece acceptă și .NET Standard.

De data aceasta, vom trimite și primi fișiere de SFTP în proiectul consolei .NET Core. SSH.NET acceptă multe cadre, astfel încât să poată fi implementat în alte proiecte decât consola.

Pregătirea în avans

  • Visual Studio trebuie să fie instalat
  • Aveți un server SFTP pentru a verifica comportamentul SFTP
  • Aveți un cont la care vă puteți conecta cu SFTP
  • Activați autentificarea prin parolă pe serverele SFTP atunci când efectuați autentificarea prin parolă
  • Atunci când efectuați autentificarea cu cheie publică, plasați cheia publică pe serverul SFTP și aveți o cheie privată (format OpenSSH) pentru a fi încărcată în client.

Instalați SSH.NET

Creați un proiect de consolă .NET Core în Visual Studio. Numele proiectului este SshNetBasic.

Primește "SSH.NET" de la NuGet.

image

image

image

image

Pachetul a fost adăugat.

image

Autentificare prin parolă

Pentru autentificarea prin parolă, utilizați clasa PasswordAuthenticationMethod pentru a seta un nume de utilizator și o parolă.

Setați clasa ConnectionInfo cu un nume de gazdă (cum ar fi sorceryforce.net sau 192.168.0.1) și metoda de autentificare pe care tocmai ați generat-o. Treceți-l la clasa "SftpClient".

Metoda SftpClient.Connect face de fapt conexiunea, iar dacă reușește, aruncă o excepție de la următoarea operație și, în caz de eșec. Deconectați-vă cu metoda Deconectare.

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

Autentificarea cheii publice

Plasați cheia privată în orice folder de pe client. După cum puteți vedea în sfaturile de configurare, dacă plasați cheia privată într-un folder care poate accesa alte conturi, Procesarea SFTP poate să nu reușească. Asigurați-vă că aveți acces la contul pe care îl rulați sau numai la Administratori.

image

Ceea ce este diferit de autentificarea prin parolă este că metoda de autentificare s-a schimbat în PrivateKeyAuthenticationMethod.

Specificați "PrivateKeyFile" ca al doilea argument și specificați calea fișierului și fraza de acces (dacă este setată) unde este plasată cheia privată.

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

Trimiteți și primiți fișiere cu SFTP

Trimiteți și primiți fișiere scriind codul de trimitere și primire după conectarea la server cu metoda SftpClient.Connect. Ceea ce facem este "citiți fișierele locale și trimiteți-le pe serverele SFTP" și "descărcați fișiere de pe serverele SFTP și salvați-le local". Acesta poate fi pus în aplicare fără a scrie sarcini deosebit de dificile.

Puteți trimite și primi nume de fișiere japoneze fără probleme.

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

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

Rezumat

SSH.NET facilitează trimiterea și primirea SFTP. Poate dura mai mult pentru a pregăti un mediu de testare decât pentru a implementa un program.

Sftp face, în esență, același lucru ca FTP, și cea mai mare parte a muncii este implementată în SSH.NET. Această bibliotecă este recomandată dacă doriți să utilizați programa SFTP.