שליחה וקבלה של SFTP ב- .NET

תאריך יצירת דף :

סביבה

סטודיו חזותי
  • Visual Studio Community 2017
  • Visual Studio Community 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ זה עובד בגרסאות אחרות, אבל זה לא מאושר

בהתחלה

צור תוכנית לקוח עבור SFTP כדי לשלוח ולקבל קבצים ב- .NET Framework ( .NET Core). תוכניות הקשורות ל- SFTP אינן סטנדרטיות ב- .NET. נשתמש בספרייהשל צד שלישיSSH.NET.

SSH.NET לא עודכן לאחרונה, אך קל יחסית ליישם את התוכנית. אני לא חושב שיש הרבה חסרונות של שימוש בו כי זה גם תומך .NET Standard.

הפעם, נשלח ונקבל קבצים על ידי SFTP בפרויקט מסוף .NET Core. SSH.NET תומך במסגרות רבות, כך שניתן ליישם אותה בפרויקטים שאינם הקונסולה.

הכנה מראש

  • יש להתקין את Visual Studio
  • יש לך שרת SFTP כדי לאמת את אופן הפעולה של sftp
  • יש לך חשבון שאתה יכול להתחבר אליו עם SFTP
  • אפשר אימות סיסמה בשרתי sftp בעת ביצוע אימות סיסמה
  • בעת ביצוע אימות מפתח ציבורי, מקם את המפתח הציבורי בשרת SFTP ונהל טעינה של מפתח פרטי (תבנית OpenSSH) ללקוח.

התקנת SSH.NET

צור פרוייקט מסוף .NET Core ב- Visual Studio. שם הפרוייקט הוא SshNetBasic.

מקבל את ה"SSH.NET" מ-NuGet.

image

image

image

image

החבילה נוספה.

image

אימות סיסמה

לאימות סיסמה, השתמש במחלקה PasswordAuthenticationMethod כדי להגדיר שם משתמש וסיסמה.

הגדר את המחלקה ConnectionInfo בשם מחשב מארח (כגון sorceryforce.net או 192.168.0.1) ואת האימות שיצרת זה עתה. תעביר את זה למחלקת "SftpClient".

פעולת השירות SftpClient.Connect למעשה יוצרת את החיבור, ואם הוא מצליח, הוא זורק חריג לפעולה הבאה, ובמקרה של כשל. התנתקות עם פעולת השירות Disconnect.

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

אימות מפתח ציבורי

מקם את המפתח הפרטי בכל תיקיה בלקוח. כפי שניתן לראות בעצות ההתקנה, אם אתה ממקם את המפתח הפרטי שלך בתיקיה שיכולה לגשת לחשבונות אחרים, עיבוד SFTP עלול להיכשל. הקפד לוודא שיש לך גישה לחשבון שאתה מפעיל או למנהלי מערכת בלבד.

image

מה ששונה מאימות סיסמה הוא ששיטת האימות השתנתה ל- PrivateKeyAuthenticationMethod.

ציין את "PrivateKeyFile" כארגומנט השני וציין את נתיב הקובץ ואת ביטוי הפס (אם מוגדר) במקום שבו ממוקם המפתח הפרטי.

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

שליחה וקבלה של קבצים באמצעות SFTP

שלח וקבל קבצים על-ידי כתיבת קוד השליחה וקבלה לאחר התחברות לשרת באמצעות פעולת השירות SftpClient.Connect. מה שאנחנו עושים הוא "לקרוא קבצים מקומיים ולשלוח אותם לשרתי SFTP" ו "להוריד קבצים משרתי SFTP ולשמור אותם באופן מקומי". זה יכול להיות מיושם מבלי לכתוב משימות קשות במיוחד.

באפשרותך לשלוח ולקבל שמות קבצים ביפנית ללא בעיות.

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

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

תקציר

SSH.NET מקל על השליחה וקבלת SFTP. ייתכן שיחולך זמן רב יותר כדי להכין סביבת בדיקה מאשר ליישם תוכנית.

Sftp עושה בעצם את אותו הדבר כמו FTP, ורוב העבודה מיושמת SSH.NET. ספריה זו מומלצת אם ברצונך להשתמש בתכנות SFTP.