我已经为我们的客户编写了一项服务,可以使用FTP自动将文件传输到指定的目的地。由于历史原因,我使用WinInet来执行FTP。一切正常,但现在客户想要添加一个只接受SFTP连接的目的地。如何与SFTP服务器进行通信
我真的不喜欢从头开始实现这个想法,那么有没有一种方法可以本地或通过WinInet与SFTP服务器进行通信?有没有我可以使用的系统库(我不担心P/Invoke :))?我必须为此购买第三方组件吗?如果是的话,您会建议哪些组件?
我已经为我们的客户编写了一项服务,可以使用FTP自动将文件传输到指定的目的地。由于历史原因,我使用WinInet来执行FTP。一切正常,但现在客户想要添加一个只接受SFTP连接的目的地。如何与SFTP服务器进行通信
我真的不喜欢从头开始实现这个想法,那么有没有一种方法可以本地或通过WinInet与SFTP服务器进行通信?有没有我可以使用的系统库(我不担心P/Invoke :))?我必须为此购买第三方组件吗?如果是的话,您会建议哪些组件?
不幸的是,SFTP没有原生支持通过WinInet或任何其他标准Windows库。
在与各种各样的SFTP服务器交谈时,我与/ n Software的IP*Works SSH for .NET祝你好运。
它花费1000美元。 – max 2016-06-02 16:26:45
http://sourceforge.net/projects/sharpssh/可能是你最好的。我结束了写剧本的WinSCP,虽然,这是比较容易......为了清晰
编辑,我建议像https://github.com/sshnet/SSH.NET现在的东西作为SharpSSH是一条走不通的项目
也听说过关于http://www.enterprisedt.com/products/edtftpnetpro/overview.html的好消息,但实际上并未使用它。 – davewasthere 2009-12-10 13:58:40
我用过它并且很喜欢它。会毫不犹豫地推荐它。 – Walter 2009-12-10 15:16:11
Seconding @ Walter的要求。这是一个很棒的图书馆。 – mrduclaw 2009-12-17 00:11:01
要么你安装一些SFTP可执行文件,并在C#程序中调用它们来执行operaton,就像你会做手工在命令行中,或使用一个库如SharpSSH
那么,客户需要最准确的日志记录,所以只需调用一些工具是不期望的。不过,我会尝试SharpSSH。 – 2009-12-10 14:05:42
SharpSSH是一个死的项目。 – 2017-07-13 05:34:30
的.NET Framwork通过的FtpWebRequest支持FTP,因为2.0版本。目前还不支持SFTP。
如果你需要FTP和SFTP,你必须尝试第三方组件。 Tamir Gal有一个open source implementation of SFTP这是经常推荐的。或者你可以尝试一个商业SFTP组件,例如我们的Rebex SFTP。
下面的代码是从Rebex SFTP tutorial page采取:
// create client, connect and log in
Sftp client = new Sftp();
client.Connect(hostname);
client.Login(username, password);
// upload the content of 'c:\data' directory and all subdirectories
// to the '/wwwroot' directory at the server
client.PutFiles(@"c:\data\*", "/wwwroot", SftpBatchTransferOptions.Recursive);
client.Disconnect();
如果你不知道你是否需要FTPS或SFTP您可以检查Rebex File Transfer Pack其中既包括。 FTP API几乎与SFTP相同。
JFYI:可能是.NET中用于SFTP的功能最丰富的组件是我们的SFTPBlackbox。
在任何版本的.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 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
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的作者)
我创建使用WinSCP赋予与SFTP服务器交互的演示。
此应用程序能够使用WinSCP .NET程序集在SFTP服务器中上传,删除,重命名和提取文件系统的信息。
SFTP是哪个变种? – SLaks 2009-12-10 13:58:13
那么,只有一个SFTP。另一个叫做FTPS。 – 2009-12-10 14:03:50
哦,我明白了,对不起。安全的FTP,而不是简单的FTP。 – 2009-12-10 14:04:21