[CodeSnippet] SSH/SFTP en C# usando SharpSSH
.NET tiene una clase llamada FtpWebRequest, para el acceso a un FTP, un ejemplo completo en el siguiente artículo: Simple FTP Demo Application Using C#.NET 2.0.
Pero esa clase no soporte SFTP, como lo comentan en este foro: SSH/SFTP Communications in C# (revisar las respuestas tiene otras opciones).
Una librería gratuita es: SharpSSH, gracias a Tamir Gal. Cuando descarguen la librería, también hay una aplicación consola de ejemplo, y con Reflector podemos ver como funciona esta librería.
Y nada, el código para subir un archivo usando el protocolo SFTP, es el siguiente. Archívese, y compártase:
1: using System;
2: using System.Configuration;
3: using tss = Tamir.SharpSsh;
4:
5: namespace DemoSFTP
6: {
7: class Program
8: {
9: static void Main(string[] args)
10: {
11:
12: String hostServer = ConfigurationManager.AppSettings["host"];
13: String userName = ConfigurationManager.AppSettings["userName"];
14: String password = ConfigurationManager.AppSettings["password"];
15: Int32 port = Int32.Parse(ConfigurationManager.AppSettings["port"]);
16:
17: String fromFile= @"D:\Datos\prueba.txt";
18: String toFile = "/carpeta01/prueba.txt";
19:
20: //Create object
21: tss.SshTransferProtocolBase sftpClient;
22: sftpClient = new tss.Sftp(hostServer, userName);
23: sftpClient.Password = password;
24:
25: //connect to server
26: sftpClient.Connect(port);
27:
28: Console.WriteLine("conectado al servidor");
29: Console.ReadLine();
30:
31: //subir archivo
32: sftpClient.Put(fromFile,toFile);
33:
34: Console.WriteLine("archivo publicado");
35: Console.ReadLine();
36:
37: //close connection
38: sftpClient.Close();
39:
40: }
41: }
42: }
Saludos,