ssh-net

Cómo conectar por SSH con C# y SSH.NET

SSH.NET es una biblioteca para .NET escrita en C# que nos permite conectarnos con equipos remotos mediante protocolo SSH, en una aplicación de .NET.

Es una herramienta que puede ser muy útil para administradores de sistemas y desarrolladores que buscan automatizar tareas en servidores remotos o transferir archivos a través de SSH.

SSH.NET permite conectarnos con equipos remotos, obtener información del servidor, ejecutar comandos, descargar o subir ficheros. En definitiva, todas las funcionalidades que podemos esperar o necesitar de una conexión SSH.

Siendo que la seguridad es uno de los principales objetivos de SSH, una parte muy importante de la librería es proporcionar funciones de seguridad, como encriptación o autenticación de contraseñas y claves públicas/privadas.

Algunas de las características más destacadas de SSH.NET son:

  • Conexión SSH segura y autenticación
  • Transferencia de archivos SCP y SFTP
  • Ejecución de comandos SSH
  • Interacción con la terminal SSH
  • Manejo de claves públicas y privadas SSH
  • Manejo de autenticación con contraseñas y autenticación basada en clave

Es compatible con .NET Framework 4.0 o superior, y .NET Standard 1.3 o 2.0. Por tanto, es mutiplataforma, y funciona en Windows, Linux y MacOS.

Cómo usar SSH.NET

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.

Install-Package SSH.NET 

Aquí tenéis algunos de cómo utilizar SSH.NET extraídos de la documentación de la librería

using (var client = new SshClient("hostname", "username", "password"))

client.Connect();
Console.WriteLine(client.ConnectionInfo.ServerVersion);

var result = client.RunCommand("ls -l");
Console.WriteLine(result.Result);

using (var ms = new MemoryStream())
{
	client.Download("/home/sshnet/file 123", ms);
}
            
client.Disconnect();

Donde establece una conexión con el servidor utilizando el hostname, nombre de usuario y contraseña especificados. Luego se ejecuta el comando “ls -l” en el servidor y se imprime el resultado en la consola. Después se descarga un fichero y, finalmente, se cierra la conexión con el servidor.