如何与SFTP服务器通信

Tho*_*mar 8 .net c# sftp

我为我们的客户编写了一项服务,使用FTP自动将文件传输到给定目的地.由于历史原因,我正在使用WinInet执行FTPing.一切正常,但现在客户想要添加一个只接受SFTP连接的目的地.

我真的不喜欢从头开始实现这个的想法,那么有没有办法本地或通过WinInet与SFTP服务器进行通信?有没有我可以使用的系统库(我不担心P/Invoke :))?我是否必须为此购买第三方组件 - 如果是,您会建议哪些?

Mar*_*ryl 16

在任何版本的.NET框架中都不支持SFTP.


您必须使用第三方库来进行SFTP.

您可以使用WinSCP .NET程序集.甚至还有一个WinSCP NuGet包.

一个简单的SFTP上传C#示例:

// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = "example.com",
    UserName = "user",
    Password = "mypassword",
    SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Upload files
    session.PutFiles(@"d:\toupload\*", "/home/user/").Check();
}
Run Code Online (Sandbox Code Playgroud)

还有很多其他的例子.


您可以让WinSCP GUI为您生成SFTP代码模板,如上所述,包括C#,VB.NET和PowerShell.

在此输入图像描述


程序集只是WinSCP脚本的包装器,因此它不是完全原生的.NET代码.因此,它不适合.NET框架中的所有用例.它主要适用于自动化任务,有些用于开发GUI应用程序,而不适用于Web应用程序.

对于完全本机的.NET SFTP库,请参阅SSH.NET,这在任何答案中都没有提及.

(我是WinSCP的作者)


mdb*_*mdb 1

不幸的是,WinInet 或任何其他标准 Windows 库本身并不支持 SFTP。

我很幸运地使用 /n Software 的IP*Works SSH for .NET与各种 SFTP 服务器进行通信。