2009-12-10 82 views
5

我已经为我们的客户编写了一项服务,可以使用FTP自动将文件传输到指定的目的地。由于历史原因,我使用WinInet来执行FTP。一切正常,但现在客户想要添加一个只接受SFTP连接的目的地。如何与SFTP服务器进行通信

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

+0

SFTP是哪个变种? – SLaks 2009-12-10 13:58:13

+0

那么,只有一个SFTP。另一个叫做FTPS。 – 2009-12-10 14:03:50

+0

哦,我明白了,对不起。安全的FTP,而不是简单的FTP。 – 2009-12-10 14:04:21

回答

2

不幸的是,SFTP没有原生支持通过WinInet或任何其他标准Windows库。

在与各种各样的SFTP服务器交谈时,我与/ n Software的IP*Works SSH for .NET祝你好运。

+0

它花费1000美元。 – max 2016-06-02 16:26:45

0

http://sourceforge.net/projects/sharpssh/可能是你最好的。我结束了写剧本的WinSCP,虽然,这是比较容易......为了清晰

编辑,我建议像https://github.com/sshnet/SSH.NET现在的东西作为SharpSSH是一条走不通的项目

+1

也听说过关于http://www.enterprisedt.com/products/edtftpnetpro/overview.html的好消息,但实际上并未使用它。 – davewasthere 2009-12-10 13:58:40

+0

我用过它并且很喜欢它。会毫不犹豫地推荐它。 – Walter 2009-12-10 15:16:11

+0

Seconding @ Walter的要求。这是一个很棒的图书馆。 – mrduclaw 2009-12-17 00:11:01

-1

要么你安装一些SFTP可执行文件,并在C#程序中调用它们来执行operaton,就像你会做手工在命令行中,或使用一个库如SharpSSH

+0

那么,客户需要最准确的日志记录,所以只需调用一些工具是不期望的。不过,我会尝试SharpSSH。 – 2009-12-10 14:05:42

+0

SharpSSH是一个死的项目。 – 2017-07-13 05:34:30

0

的.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相同。

0

JFYI:可能是.NET中用于SFTP的功能最丰富的组件是我们的SFTPBlackbox

3

在任何版本的.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(); 
} 

lot of other examples


你可以有WinSCP GUI generate an SFTP code template,像上面,对你来说,包括C#,VB.NET和PowerShell。

enter image description here


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

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

(我的WinSCP的作者)

0

我创建使用WinSCP赋予与SFTP服务器交互的演示。

此应用程序能够使用WinSCP .NET程序集在SFTP服务器中上传,删除,重命名和提取文件系统的信息。

看看: https://github.com/ducfilan/SFTP-with-WinSCP

相关问题