向使用SSH.NET SshClient.RunCommand执行的命令(cli)提供输入/子命令

时间:2019-08-26 23:43:09

标签: c# .net ssh ssh.net juniper

我使用Renci SSH.NET库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:background="@color/white"
    android:textColor="@color/text_gray"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeightSmall"
    android:ellipsize="marquee"
    local:MvxBind="Text Caption" />

程序无限期地挂在这行上。

对正在发生的事情有什么解释?

1 个答案:

答案 0 :(得分:3)

AFAIK,cli是一种Shell /交互程序。因此,我想您已经尝试过执行以下操作:

client.RunCommand("cli");
client.RunCommand("cli subcommand");

错了。 cli将一直等待子命令,并且永远不会退出,直到您使用相应的命令(例如exit)将其明确关闭为止。并且在退出后,服务器将尝试执行cli subcommand作为单独的顶级命令,同样也会失败。

您必须将“ c​​li子命令”提供给cli命令的输入。但是不幸的是,SSH.NET不支持通过SshClient.RunCommand / SshClient.CreateCommand接口提供输入。

您必须打开一个shell会话(否则不建议使用这种方法来自动执行命令)。

使用SshClient.CreateShellStreamSshClient.CreateShell并将命令发送到其输入:

"cli\n" + "cli subcommand\n"

有关示例代码,请参见Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStreamC# send Ctrl+Y over SSH.NET