我已經爲我們的客戶編寫了一項服務,可以使用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