我创建了一个简单的应用程序,该应用程序使用Renci.SshNet库来更新Fortigate设备上的防火墙配置。
var auth =
new AuthenticationMethod[] { new PasswordAuthenticationMethod(username, password) };
ConnectionInfo ConnNfo = new ConnectionInfo(server, 22, username, auth);
sshclient.Connect();
string command;
string addressname = "testaddress";
command = "config firewall address";
output.Add(command);
output.Add(sshclient.CreateCommand(command).Execute());
command = string.Format(@"edit {0}", addressName);
output.Add(command);
output.Add(sshclient.CreateCommand(command).Execute());
sshclient.Disconnect();
我从输出中得到以下内容:
config firewall address
fw1 # fw1 (address) #
edit testaddress
fw1 # Unknown action 0 fw1 #
相同的命令在正常的SSH连接上工作正常。
fw1 # config firewall address
fw1 (address) # edit testaddress
new entry 'testaddress' added
fw1 (testaddress) #
只是想知道我是否正确使用它发送单独的CreateCommans.Execute()
。
答案 0 :(得分:0)
如果我理解正确,edit testaddress
是config firewall address
命令的子命令。
虽然您的代码将其作为单独的顶级命令执行。
您必须将edit testaddress
子命令提供给config firewall address
命令的输入。但遗憾的是,SSH.NET不支持使用CreateCommand
接口提供输入。
您必须打开一个shell会话(这是一种不推荐的自动执行命令的方法)。
使用SshClient.CreateShellStream
或SshClient.CreateShell
并将命令发送到其输入:
"config firewall address\nedit testaddress\n"
有关示例代码,请参阅C# send Ctrl+Y over SSH.NET。