Изпращане и получаване на 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 Standard.
Този път ще изпращаме и получаваме файлове от SFTP в проекта на конзолата .NET Core. SSH.NET подкрепя много рамки, така че може да се изпълнява в проекти, различни от конзолата.
Подготовка предварително
- Visual Studio трябва да се инсталира
- Имате SFTP сървър за проверка на поведението на SFTP
- Разполагайте с акаунт, с който можете да се свържете с SFTP
- Разрешаване на удостоверяване с парола на SFTP сървъри при извършване на удостоверяване с парола
- Когато извършвате удостоверяване с публичен ключ, поставете публичния ключ на SFTP сървъра и разполагайте с частен ключ (OpenSSH формат), който да се зареди в клиента.
Инсталиране на SSH.NET
Създаване на проект на конзола .NET Core в Visual Studio. Името на проекта е SshNetBasic.
Получава "SSH.NET" от NuGet.
Пакетът е добавен.
Удостоверяване с парола
За удостоверяване с парола използвайте класа 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 обработката може да е неуспешна. Не забравяйте да се уверите, че имате достъп до профила, който изпълнявате, или само администратори.
Различното от удостоверяването с парола е, че методът на удостоверяване е променен на 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 програмно.