2009-12-10 22 views
5

Ho scritto un servizio per il nostro cliente che trasmette automaticamente i file a determinate destinazioni tramite FTP. Per ragioni storiche sto usando WinInet per eseguire l'FTP. Tutto funziona bene, ma ora il cliente desidera aggiungere una destinazione che accetta solo connessioni SFTP.Come comunicare con il server SFTP

Non mi piace l'idea di implementare questo da zero, quindi c'è un modo per comunicare in modo nativo o tramite WinInet con un server SFTP? Ci sono delle librerie di sistema che posso usare (non ho paura di P/Invoke :))? Devo acquistare componenti di terze parti per questo - se sì, quali suggeriresti?

+0

Quale variante di SFTP? – SLaks

+0

Beh, c'è solo un SFTP. L'altro si chiama FTPS. –

+0

Oh, ho capito, mi dispiace. FTP sicuro, non FTP SEMPLICE. –

risposta

2

Purtroppo, SFTP non è supportata in modo nativo da WinInet o da qualsiasi altra libreria Windows standard.

Ho avuto fortuna con/n Software IP*Works SSH for .NET nel parlare con una grande varietà di server SFTP.

+0

Costa $ 1000. – max

0

http://sourceforge.net/projects/sharpssh/ potrebbe essere il tuo migliore. Ho finito per scrivere script per WinSCP però, che era più facile ...

EDIT per chiarezza, io consiglierei qualcosa come https://github.com/sshnet/SSH.NET ora come SharpSSH è un progetto morto

+1

Ho anche sentito cose positive su http://www.enterprisedt.com/products/edtftpnetpro/overview.html, ma in realtà non l'ho usato. – davewasthere

+0

L'ho usato e lo adoro. Lo consiglierei senza esitazione. – Walter

+0

Seconding @ claim di Walter. Questa è una grande biblioteca. – mrduclaw

-1

O si installano alcuni eseguibili SFTP, e li chiamate dal vostro programma C# per eseguire l'operaton, proprio come si farebbe manualmente sulla linea di comando, o utilizzare una libreria come SharpSSH

+0

Bene, il cliente ha bisogno della registrazione più esatta, quindi non è richiesto il semplice richiamo di alcuni strumenti. Comunque, proverò SharpSSH. –

+0

SharpSSH è un progetto morto. –

0

.NET supporta FTP tramite la FtpWebRequest a partire dalla versione 2.0. Nessun supporto per SFTP ancora.

Se è necessario sia FTP che SFTP, è necessario provare un componente di terze parti. C'è un open source implementation of SFTP da Tamir Gal che è spesso raccomandato. Oppure puoi provare uno dei componenti SFTP commerciali come il nostro Rebex SFTP.

codice che segue è tratto da 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(); 

Se non siete sicuri se sarà necessario FTPS o SFTP è possibile controllare il Rebex File Transfer Pack che comprende sia. L'API FTP è quasi identica a quella SFTP.

0

JFYI: probabilmente i componenti più ricchi di funzionalità per SFTP in .NET sono i nostri SFTPBlackbox.

3

Non c'è supporto per SFTP in .NET framework, in qualsiasi versione.


È necessario utilizzare una libreria di terze parti per SFTP.

È possibile utilizzare WinSCP .NET assembly. C'è anche un WinSCP NuGet package.

Un banale caricati SFTP C# esempio:

// 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(); 
} 

ci sono lot of other examples.


Si possono avere WinSCP GUI generate an SFTP code template, come sopra, per voi, tra cui C#, VB.NET e PowerShell.

enter image description here


L'assemblea è solo un wrapper per WinSCP di scripting, quindi non è un codice completamente nativo .NET. In quanto tale, non si adatta a tutti i casi d'uso in .NET framework. È in gran parte adatto per l'automazione di attività, non per lo sviluppo di GUI o applicazioni Web.

Per una libreria SFTP .NET nativa, vedere SSH.NET, che stranamente non è menzionata in nessuna risposta.

(Io sono l'autore di WinSCP)

0

ho creato una demo di interazioni con server SFTP usando WinSCP.

Questa applicazione è in grado di caricare, eliminare, rinominare e recuperare informazioni sul sistema di file in un server SFTP utilizzando l'assembly WinSCP .NET.

Date un'occhiata a: https://github.com/ducfilan/SFTP-with-WinSCP

Problemi correlati