SFTP:n lähettäminen ja vastaanottaminen .NET-sivustossa

Sivun luontipäivämäärä :

ympäristö

Visuaalinen studio
  • Visual Studio -yhteisö 2017
  • Visual Studio -yhteisö 2019
.NET-ydin
  • 3.1
.NET-kehys
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Se toimii muissa versioissa, mutta sitä ei ole vahvistettu

Alun perin

Luo asiakasohjelma, jonka avulla SFTP lähettää ja vastaanottaa tiedostoja .NET Frameworkissa (.NET Core). SFTP:hen liittyvät ohjelmat eivät ole vakiona .NET-sivustossa. Käytämme kolmannen osapuolenkirjastoaSSH.NET .

SSH.NET ei ole päivitetty viime aikoina, mutta ohjelman toteuttaminen on suhteellisen helppoa. En usko, että sen käyttämisessä on monia haittoja, koska se tukee myös .NET Standardia.

Tällä kertaa SFTP lähettää ja vastaanottaa tiedostoja .NET Core -konsoliprojektissa. SSH.NET tukee monia puitteita, joten se voidaan toteuttaa muissa projekteissa kuin konsolissa.

Valmistelu etukäteen

  • Visual Studio on asennettava
  • Sinulla on SFTP-palvelin sftp-toiminnan tarkistamiseen
  • Sinulla on tili, jonka avulla voit muodostaa yhteyden SFTP:hen
  • Salasanan todennuksen ottaminen käyttöön sftp-palvelimilla salasanan todennuksen suorittamisen aikana
  • Kun suoritat julkisen avaimen todennusta, aseta julkinen avain SFTP-palvelimeen ja sinulla on yksityinen avain (OpenSSH-muoto), joka ladataan asiakkaaseen.

Asenna SSH.NET

Luo .NET Core -konsoliprojekti Visual Studiossa. Projektin nimi on SshNetBasic.

Saa "SSH.NET" NuGetilta.

image

image

image

image

Paketti on lisätty.

image

Salasanan todennus

Jos haluat todentaa salasanan, määritä käyttäjänimi ja salasana PasswordAuthenticationMethod-luokan avulla.

Määritä ConnectionInfo-luokalle isäntänimi (kuten sorceryforce.net tai 192.168.0.1) ja juuri luomasi todennusmenetelmä. Anna se SftpClient-luokkaan.

SftpClient.Connect-menetelmä muodostaa yhteyden, ja jos se onnistuu, se tekee poikkeuksen seuraavaan toimintoon ja, jos se epäonnistuu. Katkaise yhteys Disconnect-menetelmään.

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

Julkisen avaimen todennus

Sijoita yksityinen avain mihin tahansa asiakkaan kansioon. Kuten asetusvihjeistä näet, jos sijoitat yksityisen avaimesi kansioon, joka voi käyttää muita tilejä, SFTP-käsittely saattaa epäonnistua. Varmista, että sinulla on pääsy johtamaani tiliin tai vain järjestelmänvalvojille.

image

Salasanan todennuksesta poikkeaa se, että todennusmenetelmäksi on muuttunut PrivateKeyAuthenticationMethod.

Määritä toiseksi argumentiksi "PrivateKeyFile" ja määritä tiedostopolku ja tunnuslause (jos määritetty), johon yksityinen avain sijoitetaan.

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

Tiedostojen lähettäminen ja vastaanottaminen SFTP:n avulla

Lähetä ja vastaanota tiedostoja kirjoittamalla lähetys- ja vastaanottokoodi sen jälkeen, kun olet muodostanut yhteyden palvelimeen SftpClient.Connect-menetelmällä. Mitä teemme, on "lukea paikallisia tiedostoja ja lähettää ne SFTP-palvelimille" ja "ladata tiedostoja SFTP-palvelimilta ja tallentaa ne paikallisesti". Se voidaan toteuttaa kirjoittamatta erityisen vaikeita tehtäviä.

Voit lähettää ja vastaanottaa japanilaisia tiedostonimiä ongelmitta.

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

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

Yhteenveto

SSH.NET helpottaa SFTP:n lähettämistä ja vastaanottamista. Testiympäristön valmistelu voi kestää kauemmin kuin ohjelman toteuttaminen.

Sftp tekee olennaisilta osin saman kuin FTP, ja suurin osa työstä toteutetaan SSH.NET. Tätä kirjastoa suositellaan, jos haluat käyttää SFTP-ohjelmaa.