Domanda

Ho scritto un servizio per il nostro cliente che trasmette automaticamente i file a determinate destinazioni tramite FTP. Per ragioni storiche che sto utilizzando WinInet per eseguire la FTPing. Tutto funziona bene, ma ora il cliente vuole aggiungere una destinazione che accetta solo connessioni SFTP.

Non mi piace molto l'idea di attuare 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 -? In caso affermativo, quali si possono proporre

È stato utile?

Soluzione

Purtroppo, SFTP non è nativamente supportato da WinInet o altre librerie standard di Windows.

Ho avuto buona fortuna con / n software IP * Works SSH per NET nel parlare ad una grande varietà di server SFTP.

Altri suggerimenti

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


È necessario utilizzare una libreria di terze parti per SFTP.

È possibile utilizzare WinSCP NET assemblaggio . C'è anche un rel="nofollow WinSCP NuGet pacchetto .

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 xxxxxxxxxxx...="
};

using (Session session = new Session())
{
    // Connect
    session.Open(sessionOptions);

    // Upload files
    session.PutFiles(@"d:\toupload\*", "/home/user/").Check();
}

Ci sono molti altri esempi .


Si può avere WinSCP GUI genera un codice di SFTP modello , come sopra, per voi, tra cui C #, VB.NET e PowerShell.

entrare descrizione dell'immagine qui


L'assemblea è solo un wrapper per WinSCP di scripting, quindi non è un codice completamente nativo .NET. Come tale, non va bene per tutti i casi di utilizzo di .NET framework. E 'particolarmente adatta per l'automazione delle attività, un po' per lo sviluppo di applicazioni GUI, e non per le applicazioni web.

Per una libreria completamente nativa .NET SFTP, vedere SSH.NET , che è stranamente non ancora menzionato in alcuna risposta.

(Io sono l'autore di WinSCP)

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

Questa applicazione è in grado di caricare, cancellare, rinominare e recuperare informazioni di sistema di file in un server SFTP usando WinSCP Assembly .NET.

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

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

Se avete bisogno di entrambi FTP e SFTP dovete provare un componente di terze parti. C'è un aperta di SFTP da Tamir Gal che è spesso consigliato. Oppure si può provare uno dei componenti SFTP commerciali come il nostro Rebex SFTP .

A seguito di codice è tratto dal Rebex SFTP pagina esercitazione :

// 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 si è sicuri se sarà necessario FTPS o SFTP è possibile controllare il File Rebex Trasferimento pacchetto che comprende sia. L'API FTP è quasi identica a quella SFTP.

JFYI: probabilmente la maggior parte dei componenti ricche di funzionalità per SFTP NET è il nostro SFTPBlackbox <. / p>

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top