Inviare e ricevere SFTP in .NET

Data di creazione della pagina :

ambiente

Visual Studio
  • Comunità di Visual Studio 2017
  • Comunità di Visual Studio 2019
.NET Core
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Funziona in altre versioni, ma non è confermato

Dapprima

Creare un programma client per SFTP per inviare e ricevere file in .NET Framework (.NET Core). I programmi correlati a SFTP non sono standard in .NET. Utilizzeremo la libreriadi terze partiSSH.NET .

SSH.NET non è stato aggiornato di recente, ma è relativamente facile implementare il programma. Non penso che ci siano molti svantaggi nell'usarlo perché supporta anche .NET Standard.

Questa volta, invieremo e riceveremo file da SFTP nel progetto console .NET Core. SSH.NET supporta molti framework, quindi può essere implementato in progetti diversi dalla console.

Preparazione in anticipo

  • Visual Studio deve essere installato
  • Si dispone di un server SFTP per verificare il comportamento sftp
  • Avere un account a cui è possibile connettersi con SFTP
  • Abilitare l'autenticazione con password sui server sftp quando si esegue l'autenticazione con password
  • Quando si esegue l'autenticazione a chiave pubblica, posizionare la chiave pubblica sul server SFTP e disporre di una chiave privata (formato OpenSSH) da caricare nel client.

Installare SSH.NET

Creare un progetto console .NET Core in Visual Studio. Il nome del progetto è SshNetBasic.

Ottiene il "SSH.NET" da NuGet.

image

image

image

image

Il pacchetto è stato aggiunto.

image

Autenticazione con password

Per l'autenticazione tramite password, utilizzare la classe PasswordAuthenticationMethod per impostare un nome utente e una password.

Impostare la classe ConnectionInfo con un nome host (ad esempio sorceryforce.net o 192.168.0.1) e il metodo di autenticazione appena generato. Passalo alla classe "SftpClient".

Il metodo SftpClient.Connect effettua effettivamente la connessione e, se ha esito positivo, genera un'eccezione all'operazione successiva e, in caso di errore. Disconnettersi con il metodo 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();

Autenticazione a chiave pubblica

Inserire la chiave privata in qualsiasi cartella del client. Come puoi vedere nei suggerimenti per l'installazione, se inserisci la tua chiave privata in una cartella che può accedere ad altri account, L'elaborazione SFTP potrebbe non riuscire. Assicurati di avere accesso all'account che gestisci o solo agli amministratori.

image

Ciò che è diverso dall'autenticazione con password è che il metodo di autenticazione è stato modificato in PrivateKeyAuthenticationMethod.

Specificare "PrivateKeyFile" come secondo argomento e specificare il percorso del file e la passphrase (se impostata) in cui viene inserita la chiave privata.

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

Inviare e ricevere file con SFTP

Inviare e ricevere file scrivendo il codice di invio e ricezione dopo la connessione al server con il metodo SftpClient.Connect. Quello che stiamo facendo è "leggere i file locali e inviarli ai server SFTP" e "scaricare file dai server SFTP e salvarli localmente". Può essere implementato senza scrivere compiti particolarmente difficili.

È possibile inviare e ricevere nomi di file giapponesi senza problemi.

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

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

Sommario

SSH.NET semplifica l'invio e la ricezione di SFTP. La preparazione di un ambiente di test potrebbe richiedere più tempo rispetto all'implementazione di un programma.

Sftp fa essenzialmente la stessa cosa di FTP e la maggior parte del lavoro è implementato in SSH.NET. Questa libreria è consigliata se si desidera utilizzare il programma SFTP in modo ottimale.