我已经为我们的客户写了一个服务,可以使用FTP自动将文件传输到指定的目的地。由于历史原因,我使用WinInet来执行FTPing。所有这些都工作正常,但现在客户希望添加一个仅接受SFTP连接的目的地。
我真的不喜欢从头开始实现它的想法,所以有没有一种方法可以在本地或通过WinInet与SFTP服务器通信?有没有我可以使用的系统库(我不怕P/Invoke : )?我必须为此购买第三方组件吗?如果需要,您建议购买哪些组件?
发布于 2009-12-10 21:56:59
不幸的是,WinInet或任何其他标准的Windows库本身并不支持SFTP。
在与各种/n服务器交谈时,我很幸运地使用了SFTP软件的IP*Works SSH for .NET。
发布于 2017-08-13 17:01:35
在任何版本的.NET框架中都不支持SFTP。
您必须为SFTP使用第三方库。
您可以使用WinSCP .NET assembly。甚至还有一个WinSCP NuGet package。
一个简单的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();
}你可以像上面那样使用WinSCP GUI generate an SFTP code template,包括C#、VB.NET和PowerShell。

该程序集只是WinSCP脚本的包装器,因此它不是完全原生的.NET代码。因此,它并不适合.NET框架中的所有用例。它最适合于自动化任务,有点适合开发GUI应用程序,而不是真正的web应用程序。
有关完全原生的.NET SFTP库,请参阅SSH.NET,奇怪的是,在任何答案中都没有提到它。
(我是WinSCP的作者)
Windows10也附带了command-line OpenSSH sftp client。对于较旧版本的Windows,也可以下载。
发布于 2017-09-20 10:07:43
我使用WinSCP创建了一个与SFTP服务器交互的演示。
这个应用程序能够上传,删除,重命名和获取文件系统的信息在SFTP服务器使用WinSCP .NET程序集。
https://stackoverflow.com/questions/1881122
复制相似问题