gpt4 book ai didi

c# - 使用 SSH.NET 连接到远程主机

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:10 34 4
gpt4 key购买 nike

我正在尝试自动配置远程主机,我们有数百个这样的设备,我们通常通过 USB 编程来完成,但如果我可以获得一个脚本来连接到这些设备并以编程方式进行,它将节省时间.

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

目前,我只是尝试启动与设备的 SSH session 。我做了相当多的研究,并得出了这个结论:

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 访问同一设备并查看日志文件,它显示正在建立连接,但是当我中断执行并查看变量值时,输出变量显示为空。

如果我让执行坐下来,打开控制台窗口(左上角只显示一个闪烁的光标),连接在 10 分钟后超时并且连接丢失,我也在设备日志中看到这种情况。

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

最佳答案

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

问题是,您似乎无法将生成的 SshCommand 对象放入 var。

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

  • 命令文本
  • 命令超时
  • 退出状态
  • 输出流
  • 扩展输出流
  • 结果
  • 错误

它们都很有用,但由于其他一切似乎都有效,您唯一需要的相关信息是“结果”。“Result”属性将包含一个字符串,它将是您提供给 RunCommand() 的命令的主机流结果。

正如您提到的,设备的日志文件记录了成功建立的连接,看起来连接成功了。因此,您只需进行适当的调整以获取结果,如上所述,您就可以开始了。

附录:

原始帖子代码中的以下行:

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

应替换为以下代码:

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

这会将 Result 属性(它是一个字符串)分配给 output var,这将给出所需的结果。

关于c# - 使用 SSH.NET 连接到远程主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122979/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com