2009-12-10 179 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

相關問題