Senden und Empfangen von SFTP in .NET

Erstellungsdatum der Seite :

Umwelt

Visual Studio
  • Visual Studio Community 2017
  • Visual Studio-Community 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Es funktioniert in anderen Versionen, ist aber unbestätigt

Zuerst

Erstellen Sie ein Clientprogramm für SFTP zum Senden und Empfangen von Dateien in .NET Framework (.NET Core). SFTP-bezogene Programme sind in .NET nicht Standard. Wir verwenden die Bibliothek vonDrittanbieternSSH.NET .

SSH.NET wurde in letzter Zeit nicht aktualisiert, aber es ist relativ einfach, das Programm zu implementieren. Ich glaube nicht, dass es viele Nachteile bei der Verwendung gibt, da es auch .NET Standard unterstützt.

Dieses Mal senden und empfangen wir Dateien per SFTP im .NET Core-Konsolenprojekt. SSH.NET unterstützt viele Frameworks, sodass es in anderen Projekten als der Konsole implementiert werden kann.

Vorbereitung im Vorfeld

  • Visual Studio muss installiert sein
  • Sie verfügen über einen SFTP-Server, um das SFTP-Verhalten zu überprüfen
  • Haben Sie ein Konto, mit dem Sie sich mit SFTP verbinden können
  • Aktivieren der Kennwortauthentifizierung auf SFTP-Servern beim Ausführen der Kennwortauthentifizierung
  • Platzieren Sie beim Ausführen der Authentifizierung mit öffentlichem Schlüssel den öffentlichen Schlüssel auf dem SFTP-Server und lassen Sie einen privaten Schlüssel (OpenSSH-Format) in den Client laden.

Installieren von SSH.NET

Erstellen Sie ein .NET Core-Konsolenprojekt in Visual Studio. Der Projektname lautet SshNetBasic.

Ruft die "SSH.NET" von NuGet ab.

image

image

image

image

Das Paket wurde hinzugefügt.

image

Kennwortauthentifizierung

Verwenden Sie für die Kennwortauthentifizierung die PasswordAuthenticationMethod-Klasse, um einen Benutzernamen und ein Kennwort festzulegen.

Legen Sie die ConnectionInfo-Klasse mit einem Hostnamen (z. B. sorceryforce.net oder 192.168.0.1) und der soeben generierten Authentifizierungsmethode fest. Übergeben Sie es an die Klasse "SftpClient".

Die SftpClient.Connect-Methode stellt die Verbindung tatsächlich her, und wenn sie erfolgreich ist, löst sie eine Ausnahme für den nächsten Vorgang und im Falle eines Fehlers aus. Trennen Sie die Verbindung mit der Disconnect-Methode.

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

Authentifizierung mit öffentlichem Schlüssel

Legen Sie den privaten Schlüssel in einem beliebigen Ordner auf dem Client ab. Wie Sie in den Setup-Tipps sehen können, wenn Sie Ihren privaten Schlüssel in einem Ordner ablegen, der auf andere Konten zugreifen kann, Die SFTP-Verarbeitung schlägt möglicherweise fehl. Stellen Sie sicher, dass Sie Zugriff auf das von Ihnen geführte Konto oder nur auf Administratoren haben.

image

Der Unterschied zur Kennwortauthentifizierung besteht darin, dass die Authentifizierungsmethode in PrivateKeyAuthenticationMethod geändert wurde.

Geben Sie "PrivateKeyFile" als zweites Argument an und geben Sie den Dateipfad und die Passphrase (falls festgelegt) an, in denen der private Schlüssel platziert wird.

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

Senden und Empfangen von Dateien mit SFTP

Senden und Empfangen von Dateien durch Schreiben des Sende- und Empfangscodes nach dem Herstellen einer Verbindung mit dem Server mit der SftpClient.Connect-Methode. Was wir tun, ist "lokale Dateien zu lesen und sie an SFTP-Server zu senden" und "Dateien von SFTP-Servern herunterzuladen und lokal zu speichern". Es kann ohne schreiben besonders schwieriger Aufgaben umgesetzt werden.

Sie können japanische Dateinamen problemlos senden und empfangen.

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

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

Zusammenfassung

SSH.NET erleichtert das Senden und Empfangen von SFTP. Die Vorbereitung einer Testumgebung kann länger dauern als die Implementierung eines Programms.

Sftp macht im Wesentlichen dasselbe wie FTP, und die meiste Arbeit wird in SSH.NET implementiert. Diese Bibliothek wird empfohlen, wenn Sie SFTP programmgesteuert verwenden möchten.