【问题标题】:c# ssh conneciton and command problemsc# ssh连接和命令问题
【发布时间】:2016-03-27 19:21:51
【问题描述】:

我想使用 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中。我不知道是否没有看到命令,因为它没有等到连接成功或者它只是不工作。

非常感谢任何帮助。

【问题讨论】:

    标签: c# ssh connection command


    【解决方案1】:

    使用 GUI 应用程序“Putty”启动 ssh 连接不是最佳选择。首先,Putty 只是在连接尝试不成功时为您提供一个带有错误的消息框,例如

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

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

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

    【讨论】:

    • 感谢您的回答。我获取了从here 获取文件的代码。但不幸的是,我现在收到错误“当前上下文中不存在名称'sftp1'”。我不知道是否需要添加参考或缺少什么。我很感激任何提示非常感谢
    • sftp1 是一个特殊的 GUI Control,你必须将它从你的工具箱中拉到你的 GUI 中。 (比如SaveFileDialog)。您必须首先添加对该库的 .dll 的引用,才能在您的工具箱中看到该 SFTP 元素。如有其他问题,请打开一个新问题。
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多