Envoyer et recevoir SFTP dans .NET

Date de création de la page :

environnement

Visual Studio
  • Communauté Visual Studio 2017
  • Communauté Visual Studio 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Cela fonctionne dans d’autres versions, mais ce n’est pas confirmé

Au début

Créez un programme client pour SFTP afin d’envoyer et de recevoir des fichiers dans le .NET Framework (.NET Core). Les programmes liés à SFTP ne sont pas standard dans .NET. Nous utiliserons la bibliothèquetierceSSH.NET .

SSH.NET n’a pas été mis à jour récemment, mais il est relativement facile de mettre en œuvre le programme. Je ne pense pas qu’il y ait beaucoup d’inconvénients à l’utiliser car il prend également en charge .NET Standard.

Cette fois, nous enverrons et recevrons des fichiers par SFTP dans le projet de console .NET Core. SSH.NET prend en charge de nombreux frameworks, il peut donc être implémenté dans des projets autres que la console.

Préparation à l’avance

  • Visual Studio doit être installé
  • Vous disposez d’un serveur SFTP pour vérifier le comportement sftp
  • Avoir un compte auquel vous pouvez vous connecter avec SFTP
  • Activer l’authentification par mot de passe sur les serveurs sftp lors de l’authentification par mot de passe
  • Lors de l’authentification par clé publique, placez la clé publique sur le serveur SFTP et ayez une clé privée (format OpenSSH) à charger dans le client.

Installer SSH.NET

Créez un projet de console .NET Core dans Visual Studio. Le nom du projet est SshNetBasic.

Obtient le « SSH.NET » de NuGet.

image

image

image

image

Le package a été ajouté.

image

Authentification par mot de passe

Pour l’authentification par mot de passe, utilisez la classe PasswordAuthenticationMethod pour définir un nom d’utilisateur et un mot de passe.

Définissez la classe ConnectionInfo avec un nom d’hôte (tel que sorceryforce.net ou 192.168.0.1) et la méthode d’authentification que vous venez de générer. Passez-le à la classe « SftpClient ».

La méthode SftpClient.Connect établit réellement la connexion, et si elle réussit, elle lève une exception à l’opération suivante et, en cas d’échec. Déconnectez-vous avec la méthode 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();

Authentification par clé publique

Placez la clé privée dans n’importe quel dossier du client. Comme vous pouvez le voir dans les conseils de configuration, si vous placez votre clé privée dans un dossier qui peut accéder à d’autres comptes, Le traitement SFTP peut échouer. Assurez-vous d’avoir accès au compte que vous exécutez ou uniquement aux administrateurs.

image

Ce qui est différent de l’authentification par mot de passe, c’est que la méthode d’authentification est devenue PrivateKeyAuthenticationMethod.

Spécifiez « PrivateKeyFile » comme deuxième argument et spécifiez le chemin d’accès au fichier et la phrase secrète (s’ils sont définis) où la clé privée est placée.

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

Envoyer et recevoir des fichiers avec SFTP

Envoyer et recevoir des fichiers en écrivant le code d’envoi et de réception après la connexion au serveur avec la méthode SftpClient.Connect. Ce que nous faisons, c’est « lire les fichiers locaux et les envoyer aux serveurs SFTP » et « télécharger des fichiers à partir de serveurs SFTP et les enregistrer localement ». Il peut être mis en œuvre sans écrire de tâches particulièrement difficiles.

Vous pouvez envoyer et recevoir des noms de fichiers japonais sans problème.

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

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

Résumé

SSH.NET facilite l’envoi et la réception de SFTP. La préparation d’un environnement de test peut prendre plus de temps que la mise en œuvre d’un programme.

Sftp fait essentiellement la même chose que FTP, et la plupart du travail est implémenté dans SSH.NET. Cette bibliothèque est recommandée si vous souhaitez utiliser SFTP par programmation.