SFTP siuntimas ir gavimas .NET

Puslapio sukūrimo data :

Aplinkos

Vizualinė studija
  • Vizualinės studijos bendruomenė 2017
  • Vizualinės studijos bendruomenė 2019
.NET branduolys
  • 3.1
.NET sistema
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Jis veikia kitose versijose, tačiau jis nepatvirtintas

Iš pradžių

Sukurkite SFTP kliento programą failams siųsti ir gauti .NET Framework (.NET Core). Su SFTP susijusios programos nėra standartinės .NET. Mes naudosimetrečiosios šalies bibliotekąSSH.NET .

SSH.NET pastaruoju metu nebuvo atnaujintas, tačiau programą įgyvendinti yra gana lengva. Nemanau, kad yra daug trūkumų naudojant jį, nes ji taip pat palaiko .NET Standard.

Šį kartą mes atsiųsime ir gausime failus SFTP .NET Core konsolės projekte. SSH.NET palaiko daug sistemų, todėl ji gali būti įgyvendinama ne konsolės, o kituose projektuose.

Pasiruošimas iš anksto

  • Turi būti įdiegta "Visual Studio"
  • Turite SFTP serverį, kad patikrintumėte SFTP veikimą
  • Turėkite abonementą, prie kurio galite prisijungti naudodami SFTP
  • Slaptažodžio autentifikavimo įgalinimas SFTP serveriuose atliekant slaptažodžio autentifikavimą
  • Atlikdami viešojo rakto autentifikavimą, įdėkite viešąjį raktą į SFTP serverį ir turėkite privatų raktą (OpenSSH formatą), kurį reikia įkelti į klientą.

Diegti SSH.NET

Sukurkite .NET Core konsolės projektą Visual Studio. Projekto pavadinimas yra SshNetBasic.

Gauna "SSH.NET" iš NuGet.

image

image

image

image

Paketas pridėtas.

image

Slaptažodžio autentifikavimas

Slaptažodžio autentifikavimui naudokite "PasswordAuthenticationMethod" klasę, kad nustatytumėte vartotojo vardą ir slaptažodį.

Nustatykite "ConnectionInfo" klasę naudodami pagrindinio kompiuterio vardą (pvz., sorceryforce.net arba 192.168.0.1) ir autentifikavimomethodą, kurį ką tik sugeneravote. Perduokite jį "SftpClient" klasei.

SftpClient.Connect metodas iš tikrųjų atlieka ryšį, o jei jis pavyksta, jis išmeta išimtį kitai operacijai, o nesėkmės atveju - išimtį. Atsijunkite nuo atjungimo metodo.

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

Viešojo rakto autentifikavimas

Padėkite privatųjį raktą į bet kurį kliento aplanką. Kaip matote sąrankos patarimuose, jei asmeninį raktą įdedate į aplanką, kuris gali pasiekti kitus abonementus, SFTP apdorojimas gali nepavykti. Įsitikinkite, kad turite prieigą prie valdomos paskyros arba tik administratoriai.

image

Kas skiriasi nuo slaptažodžio autentifikavimo yra tai, kad autentifikavimo metodas pasikeitė į PrivateKeyAuthenticationMethod.

Kaip antrąjį argumentą nurodykite "PrivateKeyFile" ir nurodykite failo kelią ir prieigos slaptažodį (jei nustatyta), kur yra privatusis raktas.

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

Siųsti ir gauti failus su SFTP

Siųsti ir gauti failus raštu siųsti ir gauti kodą po prisijungimo prie serverio su SftpClient.Connect metodas. Ką mes darome, tai "skaityti vietinius failus ir siųsti juos į SFTP serverius" ir "atsisiųsti failus iš SFTP serverių ir išsaugoti juos vietoje". Jis gali būti įgyvendintas nerašant ypač sudėtingų užduočių.

Galite siųsti ir gauti japoniškus failų vardus be problemų.

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

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

Suvestinė

SSH.NET palengvina SFTP siuntimą ir gavimas. Bandymo aplinkos paruošimas gali užtrukti ilgiau nei programos įgyvendinimas.

Sftp daro iš esmės tą patį, kaip FTP, ir dauguma darbo yra įgyvendinama SSH.NET. Ši biblioteka rekomenduojama, jei SFTP norite naudoti programiškai.