我想连接使用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中。我不知道是否看不到这些命令,因为它没有等到连接成功或者它没有工作。
我真的很感激任何帮助。
答案 0 :(得分:1)
使用GUI应用程序&#34; Putty&#34;启动ssh连接不是最佳选择。首先,Putty只是在一个不成功的连接尝试中给你一个消息框,其中有一个错误,例如
在您的程序逻辑中,您无法对此事件作出反应,因为所有内容都由Putty处理,并且没有任何内容写入stdout
或stderr
。此外,程序挂起直到用户在发生此类错误时单击按钮,因此需要用户交互甚至让程序退出。我不确定Putty在用户关闭窗口后甚至会给你一个有意义的exitcode,你可以在执行程序后使用它。
所以,你所能做的就是希望连接成功。但是在建立连接时你没有反应。你最好的镜头是Thread.Sleep()
一段时间,然后写入stdin
。我不确定你是否可以通过stdin
(它似乎没有根据你的信息显示)或stdout
来控制Putty在GUI中显示的内容。
总的来说,启动Putty进程来建立ssh连接是错误的方法。您应该查看外部库,例如https://sshnet.codeplex.com/或C#WinSCP库和Session.ExecuteCommand()方法。它应该像代码here中所示的那样简单。使用C#库,您还可以更好地控制连接错误,超时错误,命令执行错误以及对命令输出做出反应。