Enviar i rebre SFTP a .NET

Data de creació de la pàgina :

entorn

Estudi visual
  • Comunitat d'Estudis Visuals 2017
  • Comunitat d'Estudis Visuals 2019
Nucli .NET
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

Funciona en altres versions, però no està confirmat

Al principi

Crear un programa client perquè SFTP enviï i rebi fitxers al .NET Framework (.NET Core). Els programes relacionats amb SFTP no són estàndard a .NET. Utilitzarem la bibliotecade tercersSSH.NET.

SSH.NET no s'ha actualitzat recentment, però és relativament fàcil implementar el programa. No crec que hi hagi molts desavantatges d'utilitzar-lo perquè també és compatible amb .NET Standard.

Aquesta vegada, enviarem i rebrem arxius per SFTP en el projecte de consola .NET Core. SSH.NET suporta molts frameworks, de manera que es pot implementar en projectes diferents de la consola.

Preparació prèvia

  • El Visual Studio ha d'estar instal·lat
  • Teniu un servidor SFTP per verificar el comportament de l'ftp
  • Tenir un compte al qual et puguis connectar amb SFTP
  • Habilita l'autenticació de contrasenya en servidors sftp en realitzar l'autenticació de contrasenya
  • Quan realitzeu l'autenticació de claus públiques, col·loqueu la clau pública al servidor SFTP i tingueu una clau privada (format OpenSSH) per carregar-la al client.

Instal·la SSH.NET

Crea un projecte de consola .NET Core al Visual Studio. El nom del projecte és SshNetBasic.

Rep el "SSH.NET" de NuGet.

image

image

image

image

S'ha afegit el paquet.

image

Autenticació de contrasenya

Per a l'autenticació de contrasenya, utilitzeu la classe PasswordAuthenticationMethod per definir un nom d'usuari i una contrasenya.

Definiu la classe ConnectionInfo amb un nom d'amfitrió (com ara sorceryforce.net o 192.168.0.1) i l'autenticació que acabeu de generar. Passa-ho a la classe "SftpClient".

El mètode SftpClient.Connect realment fa la connexió, i si té èxit, llança una excepció a la següent operació i, en cas de fallada. Desconnecta amb el mètode Desconnecta.

// 必要な情報を設定する
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ó de claus públiques

Col·loqueu la clau privada en qualsevol carpeta del client. Com podeu veure als consells de configuració, si col·loqueu la clau privada en una carpeta que pugui accedir a altres comptes, Pot fallar el processament de l'SFTP. Assegureu-vos d'assegurar-vos que teniu accés al compte que executeu o només als administradors.

image

El que és diferent de l'autenticació de contrasenya és que el mètode d'autenticació ha canviat a PrivateKeyAuthenticationMethod.

Especifiqueu "PrivateKeyFile" com a segon argument i especifiqueu el camí del fitxer i la frase de contrasenya (si està establerta) on es col·loca la clau 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 i rebre fitxers amb SFTP

Enviar i rebre fitxers escrivint el codi d'enviament i recepció després de connectar-se al servidor amb el mètode SftpClient.Connect. El que estem fent és "llegir arxius locals i enviar-los als servidors SFTP" i "descarregar arxius dels servidors SFTP i guardar-los localment". Es pot implementar sense escriure tasques especialment difícils.

Podeu enviar i rebre noms de fitxers japonesos sense problemes.

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

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

Resum

SSH.NET fa que sigui més fàcil enviar i rebre SFTP. Pot trigar més a preparar un entorn de prova que a implementar un programa.

Sftp fa essencialment el mateix que FTP, i la major part del treball s'implementa en SSH.NET. Aquesta biblioteca es recomana si voleu utilitzar la programació SFTP.