Enviar y recibir SFTP en .NET

Fecha de creación de la página :

medio ambiente

Visual Studio
  • Comunidad de Visual Studio 2017
  • Comunidad de Visual Studio 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Funciona en otras versiones, pero no está confirmado

Al principio

Cree un programa cliente para que SFTP envíe y reciba archivos en .NET Framework (.NET Core). Los programas relacionados con SFTP no son estándar en .NET. Utilizaremos la bibliotecade tercerosSSH.NET.

SSH.NET no se ha actualizado recientemente, pero es relativamente fácil implementar el programa. No creo que haya muchas desventajas de usarlo porque también es compatible con .NET Standard.

Esta vez, enviaremos y recibiremos archivos por SFTP en el proyecto de consola de .NET Core. SSH.NET es compatible con muchos marcos, por lo que se puede implementar en proyectos que no sean la consola.

Preparación por adelantado

  • Visual Studio debe estar instalado
  • Tiene un servidor SFTP para comprobar el comportamiento de SFTP
  • Tener una cuenta a la que pueda conectarse con SFTP
  • Habilitar la autenticación de contraseña en servidores sftp al realizar la autenticación de contraseña
  • Al realizar la autenticación de clave pública, coloque la clave pública en el servidor SFTP y tenga una clave privada (formato OpenSSH) para cargar en el cliente.

Instalar SSH.NET

Cree un proyecto de consola de .NET Core en Visual Studio. El nombre del proyecto es SshNetBasic.

Obtiene el "SSH.NET" de NuGet.

image

image

image

image

El paquete ha sido añadido.

image

Autenticación de contraseña

Para la autenticación con contraseña, utilice la clase PasswordAuthenticationMethod para establecer un nombre de usuario y una contraseña.

Establezca la clase ConnectionInfo con un nombre de host (como sorceryforce.net o 192.168.0.1) y el método de autenticación que acaba de generar. Páselo a la clase "SftpClient".

El método SftpClient.Connect realmente realiza la conexión y, si se realiza correctamente, arroja una excepción a la siguiente operación y, en caso de error. Desconéctese con el método 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();

Autenticación de clave pública

Coloque la clave privada en cualquier carpeta del cliente. Como puede ver en los consejos de configuración, si coloca su clave privada en una carpeta que puede acceder a otras cuentas, El procesamiento SFTP puede fallar. Asegúrese de tener acceso a la cuenta que ejecuta o solo a los administradores.

image

Lo que es diferente de la autenticación de contraseña es que el método de autenticación ha cambiado a PrivateKeyAuthenticationMethod.

Especifique "PrivateKeyFile" como segundo argumento y especifique la ruta de acceso del archivo y la frase de contraseña (si se establece) donde se coloca la clave privada.

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

Enviar y recibir archivos con SFTP

Envíe y reciba archivos escribiendo el código de envío y recepción después de conectarse al servidor con el método SftpClient.Connect. Lo que estamos haciendo es "leer archivos locales y enviarlos a servidores SFTP" y "descargar archivos de servidores SFTP y guardarlos localmente". Se puede implementar sin escribir tareas particularmente difíciles.

Puede enviar y recibir nombres de archivos japoneses sin problemas.

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

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

Resumen

SSH.NET facilita el envío y la recepción de SFTP. Puede llevar más tiempo preparar un entorno de prueba que implementar un programa.

Sftp hace esencialmente lo mismo que FTP, y la mayor parte del trabajo se implementa en SSH.NET. Esta biblioteca se recomienda si desea utilizar SFTP mediante programación.