【问题标题】:Specific runtime environment commands doesn't work in SSH.NET特定的运行时环境命令在 SSH.NET 中不起作用
【发布时间】:2023-03-09 01:36:01
【问题描述】:

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

与服务器的连接运行良好,所有其他命令也正常运行,但两个特定命令不起作用,我似乎无法理解为什么。
失败的命令是: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
我认为这里的问题是通过代码更改范围(更改为生产),但不明白为什么。

任何帮助将不胜感激。

【问题讨论】:

  • 是否更改为登录 shell 配置文件中的别名?您是否尝试过获取您的 ~/.bash_profile?
  • 什么意思?该文件位于何处?当我(通过代码)运行此命令时,它不会产生任何错误,它就像命令已成功执行但未发生操作一样。通过腻子它可以工作(据我所知没有任何文件,我下载它只是为了测试目的)。

标签: c# .net ssh cisco


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2010-11-24
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2015-10-02
    相关资源
    最近更新 更多