Skicka och ta emot SFTP i .NET

Datum för skapande av sida :

miljö

Visuell studio
  • Visual Studio Community 2017
  • Visual Studio Community 2019
.NET Kärna
  • 3.1
.NET-ramverket
  • 4
  • 4.8
SSH.NET
  • 2016.1.0

※ Det fungerar i andra versioner, men det är obekräftat

Först

Skapa ett klientprogram för SFTP för att skicka och ta emot filer i .NET Framework (.NET Core). SFTP-relaterade program är inte standard i .NET. Vi kommer attanvända biblioteket från tredjepart SSH.NET .

SSH.NET har inte uppdaterats nyligen, men det är relativt enkelt att implementera programmet. Jag tror inte att det finns många nackdelar med att använda det eftersom det också stöder .NET Standard.

Den här gången skickar och tar vi emot filer från SFTP i .NET Core-konsolprojektet. SSH.NET stöder många ramverk, så att det kan implementeras i andra projekt än konsolen.

Förberedelse i förväg

  • Visual Studio måste installeras
  • Du har en SFTP-server för att verifiera sftp-beteende
  • Ha ett konto som du kan ansluta till med SFTP
  • Aktivera lösenordsautentisering på sftp-servrar när lösenordsautentisering utfördes
  • När du utför autentisering med offentliga autentiseringar placerar du den offentliga nyckeln på SFTP-servern och har en privat nyckel (OpenSSH-format) som ska läsas in i klienten.

Installera SSH.NET

Skapa ett .NET Core-konsolprojekt i Visual Studio. Projektnamnet är SshNetBasic.

Får "SSH.NET" från NuGet.

image

image

image

image

Paketet har lagts till.

image

Lösenordsautentisering

För lösenordsautentisering använder du klassen PasswordAuthenticationMethod för att ange ett användarnamn och lösenord.

Ange klassen ConnectionInfo med ett värdnamn (till exempel sorceryforce.net eller 192.168.0.1) och den autentiseringsmetod som du just genererade. Skicka den till klassen "SftpClient".

Metoden SftpClient.Connect gör faktiskt anslutningen, och om den lyckas binder den ett undantag från nästa åtgärd och, i händelse av fel. Koppla från med frånkopplingsmetoden.

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

Autentisering av offentliga autentiseringar

Placera den privata nyckeln i valfri mapp på klienten. Som du kan se i installationstips, om du placerar din privata nyckel i en mapp som kan komma åt andra konton, SFTP-bearbetningen kan misslyckas. Se till att du har åtkomst till det konto du kör eller bara administratörer.

image

Det som skiljer sig från lösenordsautentisering är att autentiseringsmetoden har ändrats till PrivateKeyAuthenticationMethod.

Ange "PrivateKeyFile" som det andra argumentet och ange filsökvägen och lösenfrasen (om den är inställd) där den privata nyckeln placeras.

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

Skicka och ta emot filer med SFTP

Skicka och ta emot filer genom att skriva skicka och ta emot kod efter anslutning till servern med metoden SftpClient.Connect. Vad vi gör är att "läsa lokala filer och skicka dem till SFTP-servrar" och "ladda ner filer från SFTP-servrar och spara dem lokalt". Det kan genomföras utan att skriva särskilt svåra uppgifter.

Du kan skicka och ta emot japanska filnamn utan problem.

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

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

Sammanfattning

SSH.NET gör det enklare att skicka och ta emot SFTP. Det kan ta längre tid att förbereda en testmiljö än att implementera ett program.

Sftp gör i huvudsak samma sak som FTP, och det mesta av arbetet genomförs i SSH.NET. Det här biblioteket rekommenderas om du vill använda SFTP programvis.