إرسال واستقبال SFTP في .NET

تاريخ إنشاء الصفحة :

وسط

استوديو مرئي
  • مجتمع الاستوديو المرئي 2017
  • مجتمع الاستوديو المرئي 2019
.NET كور
  • 3.1
.NET الإطار
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ يعمل في إصدارات أخرى، ولكن غير مؤكد

في البداية

إنشاء برنامج عميل ل SFTP لإرسال واستقبال الملفات في .NET Framework (.NET الأساسية). البرامج المتعلقة SFTP غير قياسية في .NET. سوف نستخدممكتبة الطرف الثالثSSH.NET .

لم يتم تحديث SSH.NET مؤخرا، ولكن من السهل نسبيا تنفيذ البرنامج. لا أعتقد أن هناك العديد من العيوب لاستخدامه لأنه يدعم أيضا .NET قياسي.

هذه المرة، سوف نرسل واستلام الملفات من قبل SFTP في مشروع وحدة التحكم الأساسية .NET. 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 فعليا بإجراء الاتصال، وإذا نجح، فإنه يطرح استثناء إلى العملية التالية و، في حالة الفشل. قطع الاتصال مع أسلوب قطع الاتصال.

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

إرسال الملفات وتلقيها عن طريق كتابة التعليمات البرمجية send و receive بعد الاتصال بالخادم باستخدام الأسلوب 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 برمجي.