.NET的SFTP库

121

有人能推荐一个好用的SFTP库吗? 目前我正在研究一些产品,如SecureBlackbox、IPWorks SSH、WodSFTP和Rebex SFTP。 但是,我以前从未使用过任何SFTP库,所以不确定我在寻找什么。

如果有人以前使用过这些库,请问为什么我应该选择“X”而不是“Y”?


可能是如何在C# / .NET中上传文件到SFTP服务器?的重复问题。 - Jeroen K
有没有在MIT许可下授权的SFTP库? - Yash Saraiya
您可以查看SFTP组件的详细审查,网址为http://www.thedownloadplanet.com/reviews/review-ultimate-sftp-component-for-net-premium-version-for-company-with-source-code-lifetime-subscription/。 - alexanoid
8个回答

92

我搜索并发现,这个 SharpSSH 分支SSH.NET是.NET中最新且维护最好的用于SFTP(不要与FTPS混淆)通信的库。SSH.NET 是 SFTP 协议的干净的 .NET 4.0 实现,并且我已经在一些解决方案中使用它,并取得了非常出色的成功。

原始版 SharpSsh 似乎已经停止更新了,大多数其他解决方案要么需要安装 Windows 可执行文件,要么需要大量资金(或更糟糕的是两者都需要)。


7
我也使用过SSH.NET(http://sshnet.codeplex.com/),发现它非常优秀。 - Alex
11
我发现 SSH.NET 一开始就存在漏洞。检查文件/目录是否存在总是返回 true。在问题列表中,有许多已打开且得到赞同的问题,这让我对该项目失去了兴趣。 - Ronnie Overby
3
谢谢。在比较它们之后,SSH.NET 看起来更加简洁和易于使用。在我完成使用它们的项目后,我会更新我的答案。谢谢。 - Nour Lababidi
2
一个更新 - SSH.NET自2017年以来没有更新,我发现该库无法使用现代加密方式连接到SFTP服务器。 - Mike
2
@xSx,SSH.NET 最后更新于21天前,因此我会回答“是”。 - Asbjørn Ulsberg
显示剩余6条评论

59

我们使用WinSCP。它是免费的。它不是一个库,但有一个完整的文档和功能齐全的命令行接口可以与Process.Start一起使用。

更新:自v.5.0开始,WinSCP有.NET封装库可用于WinSCP的脚本层。


1
看起来不错:http://winscp.net/eng/docs/library#example - Jon Cage
5
我成功地使用了WinSCP .NET程序集(winscpnet.dll),它是WinSCP脚本接口的封装。确实,这个库有非常好的文档和示例。如果您传递不正确的参数,封装将抛出一个详细说明错误的异常。我花了一些时间来试错以获取正确的参数,这并不是WinSCP的问题,而只是我对ftps和sftp之间的混淆。此外,请记得将WinSCP.exe复制到应用程序bin文件夹中;或者您可以在调用Session.Open()之前设置Session.ExecutablePath。 - Edward
1
WinSCP是根据GPL许可证授权的。我能否使用根据MIT许可证授权的任何内容进行工作? - Yash Saraiya
1
@YashSaraiya WinSCP .NET程序集采用MPL 2.0许可,而非GPL。 - Martin Prikryl
5
不好,WinSCP与.exe相关联,这对于跨平台开发来说有些可疑。 - Alwyn
显示剩余2条评论

8

看看这个:http://www.tamirgal.com/home/dev.aspx?Item=sharpSsh

SharpSSH是SSH2客户端协议套件的纯.NET实现。它提供了一个API,用于与SSH服务器通信,并可以集成到任何.NET应用程序中。

该库是JSch项目从JCraft公司移植到C#的版本,并在BSD风格许可下发布。

SharpSSH允许您使用类似于JSch API的API读/写数据并通过SSH通道传输文件。此外,它还提供了一些额外的包装器类,为SSH通信提供了更简单的抽象。

SharpSSH项目页面: http://sourceforge.net/projects/sharpssh


10
很酷的东西,但自2007年以来就没有更新,需要一些适用于.NET 4的东西。 - Johnny_D
1
看看我的答案,那是更新和积极维护的。 - Asbjørn Ulsberg
10
我使用了这个库,但不推荐使用。它虽然能用,但感觉像是一个未完成的移植:一些顶层类缺少一些功能(例如我IRC中检测文件是否存在的测试),我必须在私有字段上调用方法才能使它们正常工作;源代码中留下了注释掉的Java代码块;包装器类以Java标准库中的类命名;到处都是Java习惯用语。我改用SSH.NET(如@asbjornu的帖子中所述),并且非常成功。 - Alex

7
我们购买了Rebex文件传输包,一切都很好。API很容易使用,我们在通信、代理服务器等方面没有遇到任何问题... 但我还没有机会将其与另一个SFTP / FTPS组件进行比较。

1
请注意,SFTP和FTPS不是同一种协议。 - Trent
实际上,SFTP 很容易被与“HTTPS FTP”混淆,但它是 SSH FTP。 - Bob Lokerse

6
Bitvise有一个很棒的产品叫做Tunnelier,可以将FTP桥接到SFTP。然后您可以在.NET中使用标准的FtpWebRequest。

http://www.bitvise.com/ftp-bridge

我目前正在为自己的目的测试这个,一旦有发现我会进行更新。

更新

这个想法不适合无人值守自动化,除非你想要跳过 hoops 保持客户端连接作为服务或其他什么,我使用 NSSM 实现了这一点。

我尝试过使用各种客户端进行 CLI 自动化,包括 bitvise 和 winscp.com。我还尝试了这些 .net 类库:Winscp、SSH.NET、SharpSSH 和商业 SecureBlackBox SFTP 客户端。

SecureBlackBox 表现不错,但是它非常重量级,根据许可证可能相当昂贵,并且我对其 API 不太满意。

毫无疑问,最好的免费 sftp 客户端是 winscp。我编写了一些类和扩展方法,使得与其一起工作更加容易:Winscp.Extensions


4

3
Chilkat并非100%托管代码。它是一个包装在.NET中的本地库。当我们引入此库时,它会破坏Visual Studio Web Designer,因为VS在32位模式下运行。我们不得不在开发和生产之间创建所有这些解决方法(生产环境是64位),以便它可以使用正确的DLL,这并不好玩。解决方法需要在目标机器上安装32位和64位DLL:http://www.chilkatforum.com/questions/114/64bit-could-not-load-file-or-assembly-chilkatdotnet4-or-one-of-its-dependencies-an-attempt-was-made-to-load-a-program-with-an-incorrect-format - Chris Smith

1

如果您需要.NET中全面的SFTP支持,请尝试edtFTPnet/PRO。它已经存在很长时间,支持许多不同的SFTP服务器。

我们还出售一款适用于Windows的SFTP服务器CompleteFTP,这是在您的Windows机器上获得SFTP支持的廉价方式。同时还具备FTP和FTPS功能。


我已经使用edtFTPnet库有一段时间了 - 它运行良好,但是 .net绑定的文档不是很好。 - Jon Cage

0
我使用过IP * Works SSH,它非常棒。 安装和使用都很容易。 此外,当你遇到问题或疑问时,他们的支持工作非常出色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接