c#ssh连接和命令问题

时间:2015-11-26 20:06:46

标签: c# ssh connection command

我想连接使用ssh连接到另一台计算机。下面你可以看到我的代码。

        ProcessStartInfo startinfo = new ProcessStartInfo();
        startinfo.FileName = @"C:\Program Files (x86)\PuTTY\putty.exe";
        startinfo.Arguments = "-ssh <user>@<domain> -pw <password>";
        Process process = new Process();
        process.StartInfo = startinfo;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        process.StandardInput.WriteLine("<command>");
        process.WaitForExit();
        Console.ReadKey();

有了这个我有两个问题。首先,命令应该等到建立连接成功。其次,命令未显示在cmd中。我不知道是否看不到这些命令,因为它没有等到连接成功或者它没有工作。

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

使用GUI应用程序&#34; Putty&#34;启动ssh连接不是最佳选择。首先,Putty只是在一个不成功的连接尝试中给你一个消息框,其中有一个错误,例如 putty_error

在您的程序逻辑中,您无法对此事件作出反应,因为所有内容都由Putty处理,并且没有任何内容写入stdoutstderr。此外,程序挂起直到用户在发生此类错误时单击按钮,因此需要用户交互甚至让程序退出。我不确定Putty在用户关闭窗口后甚至会给你一个有意义的exitcode,你可以在执行程序后使用它。

所以,你所能做的就是希望连接成功。但是在建立连接时你没有反应。你最好的镜头是Thread.Sleep()一段时间,然后写入stdin。我不确定你是否可以通过stdin(它似乎没有根据你的信息显示)或stdout来控制Putty在GUI中显示的内容。

总的来说,启动Putty进程来建立ssh连接是错误的方法。您应该查看外部库,例如https://sshnet.codeplex.com/或C#WinSCP库和Session.ExecuteCommand()方法。它应该像代码here中所示的那样简单。使用C#库,您还可以更好地控制连接错误,超时错误,命令执行错误以及对命令输出做出反应。