SFTP avec .NET 3.5

J’ai besoin de me connecter à un serveur SFTP pour télécharger des fichiers à l’aide de C # / .NET 3.5.

Le framework .NET 3.5 fournit-il des outils / mécanismes / bibliothèques intégrés permettant de se connecter à un serveur SFTP pour télécharger des fichiers?

Il existe des solutions commerciales:

…et libre:

Personnellement, je n’ai aucune expérience avec aucun d’entre eux.

SFTP dans .NET Framework, quelle que soit sa version.


La réponse de Sanj montre comment utiliser WinSCP en pilotant son application console. Bien que ce soit effectivement possible, il s’agit d’un assemblage .NET WinSCP qui le fait pour un développeur, en lui donnant une interface .NET native pour les scripts WinSCP.

Il existe même un package WinSCP NuGet .

Un exemple sortingvial de téléchargement SFTP en 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(); } 

Et la même chose pour VB.NET:

 ' Setup session options Dim sessionOptions As New SessionOptions With 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" End With Using session As New Session ' Connect session.Open(sessionOptions) ' Upload files session.PutFiles("d:\toupload\*", "/home/user/").Check() End Using 

Il y a beaucoup d’autres exemples dans les deux langues (et plus).


Vous pouvez faire en sorte que l’ interface graphique WinSCP génère un modèle de code SFTP , comme ci-dessus, y compris C #, VB.NET et PowerShell.

entrez la description de l'image ici


Comme mentionné ci-dessus, l’assembly est juste un wrapper autour des scripts WinSCP, il ne s’agit donc pas d’un code .NET entièrement natif. En tant que tel, il ne convient pas à tous les cas d’utilisation du .NET Framework. Il convient principalement à l’automatisation des tâches et non au développement d’applications graphiques ou Web.

Pour une bibliothèque .NET SFTP totalement native, voir SSH.NET , qui n’est étrangement pas mentionné dans une réponse pour le moment.

(Je suis l’auteur de WinSCP)

Non, .NET n’est livré avec aucune bibliothèque SFTP. Cependant, WinSCP est un utilitaire gratuit que vous pouvez télécharger. Je l’ai déjà utilisé pour télécharger des informations à partir d’un serveur de rapports PayPal.

Il a une belle configuration en ligne de commande pour vous permettre d’automatiser le téléchargement / téléchargement de fichiers aussi. Ainsi, à partir de mon application .NET, vous appelez simplement le processus avec les arguments spécifiques et attendez la fin.

Je préfère WinSCP. C’est gratuit et je l’ai déjà essayé, cela fonctionne parfaitement. Si vous téléchargez le fichier COM et que vous pouvez faire quelque chose comme ci-dessous: Remarque: je passe les parameters de ini.

  const ssortingng logname = "log.xml"; ssortingng username = ini.IniReadValue("sftp", "Username"); ssortingng password = ini.IniReadValue("sftp", "Password"); ssortingng remotehost = ini.IniReadValue("sftp", "Remote Host"); ssortingng dloadpath = ini.IniReadValue("Download", "Local Path"); Process winscp = new Process(); winscp.StartInfo.FileName = @ini.IniReadValue("winscp", "compath"); winscp.StartInfo.Arguments = "/log=" + logname; winscp.StartInfo.UseShellExecute = false; winscp.StartInfo.RedirectStandardInput = true; winscp.StartInfo.RedirectStandardOutput = true; winscp.StartInfo.CreateNoWindow = true; try { winscp.Start(); lblconfirm.Text = "Status: WinSCP Started Successfully"; } catch (Exception ex) { writeLog("from PutSFTP: Could not run the WinSCP executable " + winscp.StartInfo.FileName + Environment.NewLine + ex.Message); } winscp.StandardInput.WriteLine("option batch abort"); winscp.StandardInput.WriteLine("option confirm off"); winscp.StandardInput.WriteLine("open sftp://" + username + ":" + password + "@" + remotehost); winscp.StandardInput.WriteLine("cd " + ini.IniReadValue("Download", "Remote Path")); winscp.StandardInput.WriteLine(@"get " + "/" + ini.IniReadValue("Download", "Remote Path") + "/*" + ini.IniReadValue("Download", "FileType") + " " + ini.IniReadValue("Download", "Local Path")); winscp.StandardInput.Close(); ssortingng output = winscp.StandardOutput.ReadToEnd(); lblconfirm.Text = "Download Success! Check logs for moe info"; winscp.WaitForExit(); 

Le framework ne fournit pas de support SFTP.

IIS 7.x (fourni avec Windows Server 2008 ou Windows 7) ne prend en charge que les FTP , pas sFTP de manière native (voir la mise à jour ci-dessous). Il existe toutefois des solutions serveur similaires à celle-ci pour le protocole sFTP.

Si vous avez besoin d’un client sFTP , Microsoft n’a fourni aucun support jusqu’à présent. Mais j’ai fait une très bonne expérience avec un composant .NET tiers appelé wodSFTP.NET, qui est un client sFTP.

Ici vous pouvez trouver le produit et la documentation: wodSFTP.NET . Les exemples et la documentation en ligne peuvent être téléchargés sans frais ni inscription.

Notez que vous pouvez choisir d’acheter la version sans ou avec Code source en C #. Ils ont également un composant SSH. Les exemples sont toujours disponibles (quelle que soit la version choisie) en C # et VB.NET.

Exemple (extrait du site Web http://www.weonlydo.com, converti en C #):

 var wodSFTP1 = new WeOnlyDo.Client.SFTP(); // Authenticate with server using hostname, login, password. wodSFTP1.Hostname = "your_hostname"; wodSFTP1.Login = "your_login"; wodSFTP1.Password = "your_password"; wodSFTP1.Blocking = True; // Use synchronous connections wodSFTP1.Connect(); wodSFTP1.GetFile("c:\", "/home/somepath/somefile.txt"); 

Cet exemple utilise le mode bloquant (synchrone). Notez que vous pouvez également utiliser le composant de manière asynchrone. Dans ce cas, les événements seront déclenchés et vous pouvez écrire des gestionnaires d’événements pour y réagir.

Notez que cet exemple n’utilise pas de clé pour s’authentifier, mais qu’il est bien entendu également pris en charge (vous pouvez utiliser l’authentification par clé, l’authentification par mot de passe ou les deux).


Mise à jour: FTP et sFTP sont des protocoles différents. Veuillez suivre les liens pour une explication.

En l’absence de support natif, vous pouvez rechercher dans Google d’autres composants commerciaux, il vous suffit de taper quelque chose comme “Composants SFTP .NET”.