我正在使用SSH.NET将(使用用户名+密码)连接到服务器并运行一些命令。 与服务器的连接是通过思科应用控制软件管理某些组件,但这并不重要,因为命令是按原样发送的。
与服务器的连接运行良好,所有其他命令也可以工作,但是两个特定命令不起作用,我似乎无法理解为什么。
失败的命令是:changeto Production
和terminal 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
。
我认为这里的问题是通过代码改变范围(更改为生产),但无法理解原因。
任何帮助将不胜感激。
答案 0 :(得分:1)
在SSH.NET库的CodePlex论坛上搜索并询问之后,我理解了这个问题:RunCommand()
函数在每次调用时都会创建一个新的shell。
新shell是使用默认环境创建的,并且由于terminal length 0
和changeto Production
更改了以下命令的运行时环境,因此RunCommand()
无法实现此目的。
我最终直接从shell流中编写和读取(使用SshClient.CreateShellStream()
)并使用Expect()
来获取和解析我需要的输出。这样所有命令都在同一个shell中执行。