Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.5K
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda