Αποστολή και λήψη SFTP στο .NET

Ημερομηνία δημιουργίας σελίδας :

περιβάλλον

Οπτικό Στούντιο
  • Κοινότητα Οπτικού Στούντιο 2017
  • Κοινότητα Οπτικού Στούντιο 2019
.NET πυρήνας
  • 3.1
.NET Πλαίσιο
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

⇨ Λειτουργεί σε άλλες εκδόσεις, αλλά είναι ανεπιβεβαίωτο

Αρχικά

Δημιουργήστε ένα πρόγραμμα-πελάτη για SFTP για την αποστολή και λήψη αρχείων στο .NET Framework (.NET Core). Τα προγράμματα που σχετίζονται με το SFTP δεν είναι τυπικά στο .NET. Θα χρησιμοποιήσουμε τη βιβλιοθήκητρίτωνSSH.NET.

SSH.NET δεν έχει ενημερωθεί πρόσφατα, αλλά είναι σχετικά εύκολο να εφαρμοστεί το πρόγραμμα. Δεν νομίζω ότι υπάρχουν πολλά μειονεκτήματα στη χρήση του, επειδή υποστηρίζει επίσης το Πρότυπο .NET.

Αυτή τη φορά, θα στείλουμε και θα λάβουμε αρχεία από την SFTP στο έργο κονσόλας .NET Core. SSH.NET υποστηρίζει πολλά πλαίσια, ώστε να μπορεί να εφαρμοστεί σε έργα εκτός της κονσόλας.

Προετοιμασία εκ των προτέρων

  • Πρέπει να εγκατασταθεί το Οπτικό Στούντιο
  • Έχετε ένα διακομιστή SFTP για να επαληθεύσετε τη συμπεριφορά sftp
  • Έχετε έναν λογαριασμό με τον οποίο μπορείτε να συνδεθείτε με το SFTP
  • Ενεργοποίηση ελέγχου ταυτότητας κωδικού πρόσβασης σε διακομιστές sftp κατά την εκτέλεση ελέγχου ταυτότητας κωδικού πρόσβασης
  • Κατά την εκτέλεση ελέγχου ταυτότητας δημόσιου κλειδιού, τοποθετήστε το δημόσιο κλειδί στο διακομιστή SFTP και έχετε ένα ιδιωτικό κλειδί (μορφή OpenSSH) που θα φορτωθεί στον υπολογιστή-πελάτη.

Εγκατάσταση SSH.NET

Δημιουργήστε ένα έργο κονσόλας πυρήνα .NET στο 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

Αποστολή και λήψη αρχείων με τη σύνταξη του κώδικα αποστολής και λήψης μετά τη σύνδεση στο διακομιστή με τη μέθοδο 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.