Pošiljanje in prejemanje SFTP v .NET
okolje
- Vizualni studio
-
- Skupnost vizualnega studia 2017
- Skupnost vizualnega studia 2019
- .NET Jedro
-
- 3.1
- .NET Framework
-
- 4
- 4.8
- SSH.NET
-
- 2016.1.0
- Deluje v drugih različicah, vendar je nepotrjenega
Sprva
Ustvarite odjemalec program za SFTP za pošiljanje in prejemanje datotek v .NET Framework (.NET Core). Programi, povezani s SFTP, niso standardni v .NET. Uporabili bomoknjižnico tretjihoseb SSH.NET .
SSH.NET ni bil posodobljen v zadnjem času, vendar je relativno enostavno izvajati program. Mislim, da ni veliko slabosti uporabe, ker podpira tudi .NET Standard.
Tokrat bomo pošiljali in prejemali datoteke s strani SFTP v projektu konzole .NET Core. SSH.NET podpira številne okvire, zato ga je mogoče izvajati v projektih, ki niso konzola.
Priprava vnaprej
- Visual Studio je treba namestiti
- Imate strežnik SFTP za preverjanje vedenja SFTP
- Imate račun, s ki ga lahko povežete s storitvi SFTP
- Omogočanje preverjanja pristnosti gesla v strežnikih SFTP pri preverjanju pristnosti gesla
- Pri preverjanju pristnosti javnega ključa postavite javni ključ v strežnik SFTP in imate zasebni ključ (oblika OpenSSH), ki ga je treba naložiti v odjemalca.
Namestite SSH.NET
Ustvarite projekt konzole .NET Core v programu Visual Studio. Ime projekta je SshNetBasic.
Dobi "SSH.NET" iz NuGeta.
Paket je bil dodan.
Preverjanje pristnosti gesla
Za preverjanje pristnosti gesla uporabite razred PasswordAuthenticationMethod za nastavitev uporabniškega imena in gesla.
Nastavite razred ConnectionInfo z imenom gostitelja (na primer sorceryforce.net ali 192.168.0.1) in načinom preverjanja pristnosti, ki ste ga pravkar ustvarili. Podajte ga razredu SftpClient.
Metoda SftpClient.Connect dejansko omogoča povezavo in če ji uspe, vrže izjemo v naslednjo operacijo in v primeru okvare. Prekinite povezavo z metodo Prekini povezavo.
// 必要な情報を設定する
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();
Preverjanje pristnosti javnega ključa
Postavite zasebni ključ v katero koli mapo v odjemalcu. Kot lahko vidite v namigih za namestitev, če zasebni ključ postavite v mapo, ki lahko dostopa do drugih računov, Obdelava SFTP lahko ne uspe. Prepričajte se, da imate dostop do računa, ki ga zaženete, ali samo skrbnikov.
Kaj se razlikuje od preverjanja pristnosti gesla je, da se je metoda preverjanja pristnosti spremenila v PrivateKeyAuthenticationMethod.
Kot drugi argument navedite »PrivateKeyFile« in navedite pot datoteke in frazo za podajo (če je nastavljena), kjer je nastavljen zasebni ključ.
// 必要な情報を設定する
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();
Pošiljanje in prejemanje datotek s SFTP
Pošiljanje in prejemanje datotek s pisanjem kode za pošiljanje in prejemanje po povezovanju s strežnikom z metodo SftpClient.Connect. To, kar počnemo, je "prebrati lokalne datoteke in jih poslati na SFTP strežnike" in "prenesete datoteke iz SFTP strežnikov in jih shranite lokalno". Izvaja se lahko brez pisanja posebej težkih nalog.
Imena japonskih datotek lahko pošiljate in prejemate brez težav.
/* ---------------- 中略 ------------------- */
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();
Povzetek
SSH.NET omogoča lažje pošiljanje in prejemanje storitve SFTP. Morda bo trajalo dlje, da pripravite testno okolje, kot da izvajate program.
Sftp počne v bistvu enako kot FTP, večina dela pa se izvaja v SSH.NET. Ta knjižnica je priporočljiva, če želite programsko uporabljati SFTP.