在 C# 中使用 SFTP To Go 连接到 SFTP

有关如何使用 SFTP To Go 服务以 C#(一种流行的 Web 开发编程语言)连接到 SFTP 服务器的分步指南。

指南概述

在本指南中,您将使用 SSH.NET 库(一种用于处理 .NET 应用程序中的网络操作的流行框架)探索 C# 中 SFTP 的实际实现。您还将使用 C# 中的 SFTP To Go 来处理专为 SFTP 操作而设计的两个关键组件

第一个是SFTPClient,这是一个控制台应用程序,允许用户交互式地执行文件操作,例如上传、下载和管理我们的文件SFTP 服务器。读完本指南后,您将了解如何设置并执行这些操作。

第二个是SFTPService,一个类库项目,提供 SFTP 交互所需的底层功能,包括连接到服务器和处理文件操作。

这种拆分确保了由 SFTPClient 提供的用于直接交互的用户界面与封装在其中的核心 SFTP 功能之间的明确分离SFTPService,从而促进不同 C# 项目中的模块化和可重用性。

所以:

  • SFTPClient:使用 SFTP To Go 进行各种文件操作的控制台应用程序。
  • SFTPService:包含连接、上传、下载和删除文件功能的类库项目。

无论您是老派 C# 开发人员还是新手,本指南都提供了将 SFTP To Go 集成到 C# 项目中的清晰途径。

放下你的手,说明将在下一节中提供。

一、要求

在深入实施 C# 应用程序中的 SFTP 功能之前,必须满足一些要求才能顺利、成功地集成。

以下是您开始使用时所需要的:

.NET开发环境:

  • 框架:确保您已设置.NET 开发环境,最好是最新版本.NET Core 或 .NET Framework 的。这是构建和运行 C# 应用程序的平台。
  • IDE:合适的集成开发环境 (IDE),例如 Visual Studio 或 Visual Studio Code就位。这些 IDE 提供全面的工具和功能来帮助您完成开发过程,包括对 C# 和 .NET 的内置支持。

SSH.NET 库:

  • 用途:SSH.NET 是一个广泛使用的 .NET 库,提供在 .NET 应用程序中处理 SSH(安全外壳)和 SFTP(安全文件传输协议)的功能。它是在您的项目中实施 SFTP 操作的重要组件。
  • 安装:通过命令行界面使用NuGet Package Manager安装 SSH.NET。安装命令为:
dotnet add package SSH.NET --version 2020.0.0-beta1

此命令将 SSH.NET 库添加到您的项目中,为其配备处理 SFTP 操作所需的工具。

SFTP和SSH的理解:

SFTP服务器访问凭证:

  • 凭据:您需要使用必要的凭据(包括主机)访问 SFTP 服务器(如果您使用 SFTP To Go,这将是 SFTP To Go 服务器)地址、端口号、用户名和密码。
  • 存储凭据:将您的 SFTP To Go 凭据安全地存储在环境变量中。这可以直接在您的操作系统中完成,也可以通过项目中的 .env 文件完成。
  • 在 C# 中加载凭据:使用 DotNetEnv 库从 .env 文件加载环境变量。使用Environment.GetEnvironmentVariable(“SFTPTOGO_URL”)从环境变量中检索SFTP To Go URL。
  • 提取连接详细信息:解析 SFTP URL 以提取主机、端口、用户名和密码。使用 C# 中的 Uri 类将 URL 拆分为其组件。
using System;
using DotNetEnv;

class Program
{
    static void Main()
    {
        DotNetEnv.Env.Load(); // Load .env file
        string sftpUrl = Environment.GetEnvironmentVariable("SFTPTOGO_URL");
        var uri = new Uri(sftpUrl);

        // Extracting credentials
        string host = uri.Host;
        int port = uri.Port;
        string username = uri.UserInfo.Split(':')[0];
        string password = uri.UserInfo.Split(':')[1];

        // Credentials can now be used for SFTP operations
    }
}
  • 基于密钥的身份验证:在某些情况下,可能会使用基于密钥的身份验证而不是密码。

基本的 C# 编程技能:

  • C# 语言:C# 编程的基本能力必须跟随实现。
  • .NET 概念:熟悉常见的 .NET 概念和构造,因为您将使用类、方法、异常处理和日志记录。

满足这些要求后,您就可以充分准备将 SFTP 功能集成到 .NET 应用程序中,从而增强其安全管理与外部服务器的文件传输的能力。

但说实话,这些要求很重要。

 

2. C#中SFTP操作的SftpService类

SftpService 类是在 .NET 应用程序中实现 SFTP 操作的基石。此类封装了与 SFTP 服务器交互所需的功能,为上传、下载、列出和删除文件等文件操作提供了简化且安全的方法。

类结构和依赖关系:

SftpService 类应设计为处理各种文件操作。它依赖于 SSH.NET 库,这有助于与 SFTP 服务器交互。该类应包括:

依赖项

  • ILogger 用于记录操作和错误处理。
  • SftpConfig 用于存储 SFTP 服务器配置详细信息,例如主机、端口、用户名和密码。

构造函数

  • 构造函数使用记录器和 SFTP 配置初始化服务。

文件操作方法:

SftpService 中的每个方法对应一个特定的 SFTP 操作:

  • ListAllFiles:列出指定远程目录中的所有文件。
  • UploadFile:将文件从本地路径上传到远程 SFTP 服务器。
  • DownloadFile:从远程 SFTP 服务器下载文件到本地路径。
  • DeleteFile:从远程 SFTP 服务器删除文件。

示例实现:

这是 SftpService 类的简化版本:

public class SftpService : ISftpService
{
 private readonly ILogger<SftpService> _logger;
 private readonly SftpConfig _config;
 public SftpService(ILogger<SftpService> logger, SftpConfig sftpConfig)
 {
     _logger = logger;
     _config = sftpConfig;
 }
 public IEnumerable<ISftpFile> ListAllFiles(string remoteDirectory = ".")
 {
     var client = new SftpClient(_config.Host, _config.Port,
                                      _config.UserName, _config.Password);
     client.Connect();
     Console.WriteLine("Connected!");
     return client.ListDirectory(remoteDirectory);
  }
  
 public void UploadFile(string localFilePath, string remoteFilePath)
 {
     var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
                                      _config.UserName, _config.Password);
     client.Connect();
     var s = File.OpenRead(localFilePath);
     client.UploadFile(s, remoteFilePath);
 }
 
 public void DownloadFile(string remoteFilePath, string localFilePath)
 {
     var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
                                      _config.UserName, _config.Password);
     client.Connect();
     var s = File.Create(localFilePath);
     client.DownloadFile(remoteFilePath, s);
     Console.WriteLine($"Finished downloading file!");
 }
 
 public void DeleteFile(string remoteFilePath)
 {
     var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port,
                                 _config.UserName, _config.Password);
     client.Connect();
     client.DeleteFile(remoteFilePath);
     Console.WriteLine($"File [{remoteFilePath}] deleted.");
 }

与 .NET 应用程序集成:

通过以下方式将SftpService集成到您的 .NET 应用程序中:

  • 实例化类:创建 SftpService 的实例,传入必要的记录器和配置。
  • 使用方法:使用SFTP服务器进行各种文件操作的方法。

在 C# 中配置 SFTP:

正确配置 SFTP 是确保 C# 应用程序和 SFTP 服务器(例如 SFTP To Go 服务器)之间安全有效通信的基础。这涉及设置必要的参数,使您的应用程序能够连接到 SFTP 服务器并与之交互。具体方法如下:

了解 SFTP 配置要求:

SFTP 配置需要有关 SFTP 服务器的特定详细信息。这些细节包括:

  • Host:SFTP 服务器的地址。如果您使用 SFTP To Go,这将是 SFTP To Go 服务器。
  • 端口:用于 SFTP 连接的端口号。
  • 用户名:登录SFTP服务器的用户名。
  • 密码:与用户名关联的密码。或者,可以使用基于密钥的身份验证。

创建 SftpConfig 类:

SftpConfig 类保存配置详细信息。这是一个简单的类,其属性与必要的 SFTP 服务器详细信息相对应:

public class SftpConfig{
         public string Host { get; set; }
         public int Port { get; set; }
         public string UserName { get; set; }
         public string Password { get; set; }

填充配置详细信息:

您可以根据信息的敏感性和应用程序的架构,以多种方式填充 SftpConfig 对象:

  • 硬编码(不建议用于生产):直接在代码中设置值。
  • 环境变量:将详细信息存储在环境变量中并在应用程序中读取它们。本文的要求部分概述了此选项。
  • 安全保管库服务:在云应用程序中,使用 Azure Key Vault 等服务来存储敏感数据。

配置设置示例:

以下是使用环境变量设置 SftpConfig 的示例:

var config = new SftpConfig{
 Host = "your_sftp_server.com",
 Port = 22, // Default SFTP port
 UserName = "your_username",
 Password = "your_password"
}

使用配置:

填充 SftpConfig 对象后,将其传递给 SftpService< i=4> 类:

var sftpService = new SftpService(new NullLogger<SftpService>(), config);

有些人仍然去上班——他们甚至不能穿睡衣。 🥲

 

3. C#中使用SftpService执行SFTP操作

将 SftpService 配置到 C# 应用程序后,您就可以开始执行各种 SFTP 操作。这些操作对于管理远程 SFTP 服务器上的文件至关重要。以下是有关使用 SftpService 执行关键 SFTP 操作的综合指南:

列出文件:

列出 SFTP 服务器上目录中的文件:

var files = sftpService.ListAllFiles("/");
foreach (var file in files){
  if (file.IsDirectory){
      Console.WriteLine($"Directory: [{file.FullName}]");
      }
   else if (file.IsRegularFile){
       Console.WriteLine($"File: [{file.FullName}]");
       }
}

下载文件:

要将文件从服务器下载到您的系统:

const string pngFile = @"test.png";
File.Delete(pngFile);
sftpService.DownloadFile(@"/folder/imap-console-client.png", pngFile);
if (File.Exists(pngFile)){
 Console.WriteLine($"file {pngFile} downloaded");
}

上传文件:

要将文件从您的系统上传到 SFTP 服务器:

var testFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.txt");
sftpService.UploadFile(testFile, @"/folder/test.txt");

删除文件:

只需使用以下语句即可从 SFTP 服务器上删除文件:

sftpService.DeleteFile(@"/folder/test.txt");

异常处理和日志记录:

每个操作都包装在 try-catch 块中,以处理 SFTP 操作期间的任何异常。正确记录这些异常对于诊断生产中的问题至关重要。

连接管理:

SftpService 类旨在处理每个方法中的连接生命周期,确保根据需要打开和关闭连接。这可以避免不必要地打开连接,并处理操作期间可能出现的任何连接问题。

要关闭连接,请使用 Disconnect 方法,该方法将在调用操作方法时使用 SftpService 类中正式创建的客户端对象来调用:

client.Disconnect();
开动脑筋在C#中连接SFTP

读完本文后,您的大脑有何感受。

 

4. 整个事情

您现在已经全面了解了如何在 C# 中设置和使用 SftpService 通过 SFTP 进行安全文件操作。您可能希望从头到尾运行整个程序,将所有这些部分放在一起,并查看完整的实施情况。

完整代码,包括SftpService类、SftpConfig 设置以及各种SFTP操作的示例(如列出文件、上传、下载、删除),供您参考和使用。

访问完整代码:

要访问并运行完整的程序,请访问SFTP To Go 示例 GitHub 存储库。该存储库包含本文中讨论的所有代码,组织整齐并准备好执行。您可以通过以下方式访问它:

  1. 访问 GitHub 存储库: 使用 C#(.NET) 开始使用 SFTP
  2. 查看和下载:您可以直接在 GitHub 上查看代码。要在您的计算机上运行它,请下载整个项目或使用 Git 克隆存储库:
git clone https://github.com/crazyantlabs/sftptogo-examples.git

3.导航到 dotnet 子目录:克隆存储库后,您可以导航到克隆存储库中的 dotnet 子目录:

cd sftptogo-examples/dotnet 

4。打开并运行:在您首选的 .NET IDE 中打开下载的项目并运行它以查看 SftpService 的运行情况。

#csharp 

在 C# 中使用 SFTP To Go 连接到 SFTP
1.15 GEEK