Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
¿Cómo ejecutar comandos en el servidor SSH en C#?

Necesito ejecutar esta acción usando un código C#:

  1. abre putty.exe en segundo plano (es como una ventana cmd)
  2. inicie sesión en un host remoto usando su dirección IP
  3. Introduzca un nombre de usuario y contraseña
  4. ejecutar varios comandos uno tras otro.
  5. ejecute otro comando que obtenga una respuesta que me diga que los comandos que ejecuté antes se ejecutaron con éxito

Así que estoy tratando de hacerlo así:

 ProcessStartInfo proc = new ProcessStartInfo() { FileName = @"C:\putty.exe", UseShellExecute = true, //I think I need to use shell execute ? RedirectStandardInput = false, RedirectStandardOutput = false, Arguments = string.Format("-ssh {0}@{1} 22 -pw {2}", userName, hostIP, password) ... //How do I send commands to be executed here ? }; Process.Start(proc);
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede probar https://sshnet.codeplex.com/ . Con esto no necesitarías masilla o una ventana en absoluto. También puede obtener las respuestas. Se vería algo. Me gusta esto.

 SshClient sshclient = new SshClient("172.0.0.1", userName, password); sshclient.Connect(); SshCommand sc= sshclient .CreateCommand("Your Commands here"); sc.Execute(); string answer = sc.Result;

Editar: Otro enfoque sería usar un shellstream.

Crea un ShellStream una vez como:

 ShellStream stream = sshclient.CreateShellStream("customCommand", 80, 24, 800, 600, 1024);

Entonces puedes usar un comando como este:

 public StringBuilder sendCommand(string customCMD) { StringBuilder answer; var reader = new StreamReader(stream); var writer = new StreamWriter(stream); writer.AutoFlush = true; WriteStream(customCMD, writer, stream); answer = ReadStream(reader); return answer; } private void WriteStream(string cmd, StreamWriter writer, ShellStream stream) { writer.WriteLine(cmd); while (stream.Length == 0) { Thread.Sleep(500); } } private StringBuilder ReadStream(StreamReader reader) { StringBuilder result = new StringBuilder(); string line; while ((line = reader.ReadLine()) != null) { result.AppendLine(line); } return result; }
over 4 years ago · Santiago Trujillo Denunciar

0

Si bien la respuesta de @LzyPanda funciona, usar un canal SSH "shell" ( SshClient.CreateShellStream ), dejar solo un terminal interactivo, no es una buena idea para automatizar la ejecución de comandos. Obtiene muchos efectos secundarios de eso, como indicaciones de comando, secuencias ANSI, comportamiento interactivo de algunos comandos, etc.

Para la automatización, use un canal SSH "ejecutivo" ( SshClient.CreateCommand ):

 using (var command = ssh.CreateCommand("command")) { Console.Write(command.Execute()); }

Si necesita ejecutar varios comandos, repita el código anterior. Puede crear cualquier cantidad de canales "ejecutivos" para una conexión SSH.

Aunque si los comandos dependen unos de otros (el primer comando modificó el entorno, por ejemplo, las variables que utilizan los últimos comandos), debe ejecutarlos dentro de un canal. Use una sintaxis de shell para eso, como && o ; :

 using (var command = ssh.CreateCommand("command1 && command2")) { Console.Write(command.Execute()); }

Si necesita leer continuamente la salida de los comandos, use:

 using (var command = ssh.CreateCommand("command")) { var asyncExecute = command.BeginExecute(); command.OutputStream.CopyTo(Console.OpenStandardOutput()); command.EndExecute(asyncExecute); }

También puede usar ExtendedOutputStream , que contiene stderr. Consulte Supervisión de salida de comandos en tiempo real de SSH.NET .


Desafortunadamente, la implementación del canal "exec" en SSH.NET no permite proporcionar una entrada al comando. Para ese caso de uso, deberá recurrir al canal "shell", hasta que se solucione esta limitación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda