特定的运行时环境命令在SSH.NET中不起作用

时间:2013-07-18 09:05:12

标签: c# .net ssh cisco

我正在使用SSH.NET将(使用用户名+密码)连接到服务器并运行一些命令。 与服务器的连接是通过思科应用控制软件管理某些组件,但这并不重要,因为命令是按原样发送的。

与服务器的连接运行良好,所有其他命令也可以工作,但是两个特定命令不起作用,我似乎无法理解为什么。
失败的命令是:changeto Productionterminal length 0 我的代码很简单(问题简化,但流程相同):

using (var client = new SshClient(serverIP, port, username, password)
{
    client.Connect();
    var cmd = Client.RunCommand("terminal length 0");
    cmd = client.RunCommand("changeto Production");
    // Other command follow
}

虽然通过putty运行相同的命令,但它不起作用,changeto不应该是change to
我认为这里的问题是通过代码改变范围(更改为生产),但无法理解原因。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在SSH.NET库的CodePlex论坛上搜索并询问之后,我理解了这个问题:RunCommand()函数在每次调用时都会创建一个新的shell。 新shell是使用默认环境创建的,并且由于terminal length 0changeto Production更改了以下命令的运行时环境,因此RunCommand()无法实现此目的。 我最终直接从shell流中编写和读取(使用SshClient.CreateShellStream())并使用Expect()来获取和解析我需要的输出。这样所有命令都在同一个shell中执行。