.NET'te SFTP gönderme ve alma

Sayfa oluşturma tarihi :

çevre

Visual Studio
  • Visual Studio Topluluğu 2017
  • Visual Studio Topluluğu 2019
.NET Çekirdek
  • 3.1
.NET Framework
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Diğer versiyonlarda çalışır, ancak onaylanmamıştır

İlk başta

SFTP'nin .NET Framework'te (.NET Core) dosya gönderip alması için bir istemci programı oluşturun. SFTP ile ilgili programlar .NET'te standart değildir. Üçüncü tarafkütüphaneyi kullanacağız SSH.NET .

SSH.NET son zamanlarda güncelleştirilmedi, ancak programı uygulamak nispeten kolaydır. .NET Standard'ı da desteklediğinden, kullanmanın çok fazla dezavantajı olduğunu sanmıyorum.

Bu kez, .NET Core konsol projesinde SFTP tarafından dosya gönderip alacağız. SSH.NET birçok çerçeveyi desteklediğinden konsol dışındaki projelerde de uygulanabilir.

Önceden hazırlık

  • Visual Studio yüklü olmalıdır
  • Sftp davranışını doğrulamak için bir SFTP sunucunuz var
  • SFTP ile bağlanabileceğiniz bir hesabınız var
  • Parola kimlik doğrulaması gerçekleştirirken sftp sunucularında parola kimlik doğrulamasını etkinleştirme
  • Ortak anahtar kimlik doğrulaması gerçekleştirirken, ortak anahtarı SFTP sunucusuna yerleştirin ve istemciye yüklenecek özel bir anahtara (OpenSSH biçimi) sahip olun.

SSH.NET Yükle

Visual Studio'da bir .NET Core konsol projesi oluşturun. Proje adı SshNetBasic' tir.

NuGet'ten "SSH.NET" alır.

image

image

image

image

Paket eklendi.

image

Parola kimlik doğrulaması

Parola kimlik doğrulaması için, bir kullanıcı adı ve parola ayarlamak üzere PasswordAuthenticationMethod sınıfını kullanın.

ConnectionInfo sınıfını bir ana bilgisayar adıyla (sorceryforce.net veya 192.168.0.1 gibi) ve yeni oluşturduğunuz authenticationmethod ile ayarlayın. "SftpClient" sınıfına geçirin.

SftpClient.Connect yöntemi aslında bağlantıyı yapar ve başarılı olursa, bir sonraki işlem için bir özel durum oluşturur ve hata durumunda. Disconnect yöntemiyle bağlantıyı kesin.

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

Ortak anahtar kimlik doğrulaması

Özel anahtarı istemcideki herhangi bir klasöre yerleştirin. Kurulum ipuçlarında görebileceğiniz gibi, özel anahtarınızı diğer hesaplara erişebilen bir klasöre yerleştirirseniz, SFTP işlemi başarısız olabilir. Çalıştırdığınız hesaba veya yalnızca Yöneticilere erişiminiz olduğundan emin olun.

image

Parola kimlik doğrulamasından farklı olan, kimlik doğrulama yönteminin PrivateKeyAuthenticationMethod olarak değişmiş olmasıdır.

İkinci bağımsız değişken olarak "PrivateKeyFile" belirtin ve özel anahtarın yerleştiği dosya yolunu ve parolayı (ayarlanmışsa) belirtin.

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

SFTP ile dosya gönderme ve alma

SftpClient.Connect yöntemiyle sunucuya bağlandıktan sonra gönderme ve alma kodunu yazarak dosya gönderip alın. Yaptığımız şey "yerel dosyaları okumak ve SFTP sunucularına göndermek" ve "SFTP sunucularından dosya indirmek ve yerel olarak kaydetmek". Özellikle zor görevler yazmadan uygulanabilir.

Japonca dosya adlarını sorunsuz bir şekilde gönderip alabilirsiniz.

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

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

Özet

SSH.NET SFTP göndermeyi ve almayı kolaylaştırır. Bir test ortamı hazırlamak, bir programı uygulamaktan daha uzun sürebilir.

Sftp esasen FTP ile aynı şeyi yapar ve işin çoğu SSH.NET'da uygulanır. SFTP'yi programlı olarak kullanmak istiyorsanız, bu kitaplık önerilir.