首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SSH.NET连接到远程主机

使用SSH.NET连接到远程主机
EN

Stack Overflow用户
提问于 2016-10-19 05:36:52
回答 1查看 14.8K关注 0票数 2

我试图自动配置远程主机,我们有数百台这样的设备,我们通常通过USB编程来实现,但是如果我能得到一个脚本来连接到这些设备,并以编程的方式完成,它将释放时间。

这些设备运行某种类型的linux,我不确定,但它们确实启用了SSH,并在您首次通过PuTTY等实用工具连接到它们时确认了服务器主机密钥。

现在,我只是尝试启动一个SSH会话与设备。我做了很多研究,并想出了如下结论:

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Renci.SshNet;
using Renci.SshNet.Common;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Connection information
            string user = "admin";
            string pass = "********";
            string host = "IP Address";

            //Set up the SSH connection
            using (var client = new SshClient(host, user, pass))
            {

                //Accept Host key
                client.HostKeyReceived += delegate (object sender, HostKeyEventArgs e)
                {
                    e.CanTrust = true;
                };

                //Start the connection
                client.Connect();

                var output = client.RunCommand("show device details");


                client.Disconnect();
                Console.WriteLine(output.ToString());
                Console.ReadLine();
            }
        }
    }
}

问题是,这似乎没有执行列出的命令。控制台窗口出现,我可以通过WebGUI访问同一个设备并查看日志文件,它显示正在建立连接,但当我中断执行并看到变量值时,输出变量显示为null。

如果我在控制台窗口打开(仅在左上方显示一个闪烁的光标),10分钟后连接超时,连接丢失,我也会在设备日志中看到这种情况。

为什么这似乎不执行run命令并将结果存储在输出变量中?

EN

Stack Overflow用户

发布于 2017-03-03 20:26:31

当对类型为RunCommand()的对象执行Renci.SshNet.SshClient ()方法时,它不会将结果作为变量返回。相反,它返回一个Renci.SshNet.SshCommand类型的对象。

问题是,您似乎无法将这个结果的SshCommand对象放入变量中。

执行Renci.SshNet.SshCommand ()时返回的这个RunCommand将包含几个属性和方法。这些财产是:

  • CommandText
  • CommandTimeout
  • ExitStatus
  • OutputStream
  • ExtendedOutputStream
  • 结果
  • 错误

它们都是有用的,但由于其他东西似乎都在起作用,你唯一想要的是“结果”。“结果”属性将包含一个字符串,它将是您向RunCommand()提供的命令的主机流结果。

正如您提到的,设备的日志文件记录了一个成功的连接,看起来连接是成功的。因此,您只需作出适当的调整,以获取结果,如上文所述,您应该是好的。

增编:

原始文章代码中的以下一行:

代码语言:javascript
运行
复制
var output = client.RunCommand("show device details");

应该用以下代码替换:

代码语言:javascript
运行
复制
var output = client.RunCommand("show device details").Result;

这将将结果属性(是字符串)分配给output变量,这将给出所需的结果。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40122979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档