2

好的,这就是我想要做的

我必须设置一个到 linux 机器的 SSH 会话并发出类似“ls”或 cp 的命令。

这是片段

            SshStream  ssh = new SshStream ("myhost","root","pass");
            ssh.Prompt ="#";
            ssh.RemoveTerminalEmulationCharacters = true;
            byte[] byt = System.Text.Encoding.ASCII.GetBytes("rm vivek");
            Array.Resize (ref byt,byt.Length +3 );
            byt[byt.Length-1]=(byte)'\r';
            byt[byt.Length - 2] = (byte)'y';
            byt[byt.Length - 3] = (byte)'\r';
            ssh.Write(byt);

            Console.WriteLine(ssh.ReadResponse());

问题是像“ls”这样的命令很简单,你输入它并给出输出,但是像rm这样的命令

需要额外的确认,如“y”

正如您从上面的代码片段中看到的那样,代码本质上会生成一个字节序列,例如

rm vivek [输入] y [输入]

但它不起作用,就好像它仍在等待输入

[root@host ~]# rm vivek
rm: remove regular file `vivek'?

我在这里做错了什么?

希望问题很清楚。

PS 我再次尝试了 SSHExec 示例,结果相同。

4

1 回答 1

1

为什么不只是rm vivek -f避免确认呢?

否则,请在阅读回复之前期待问题并回答:

 ssh.Write(byt);
 ssh.Expect("rm: remove .*");
 ssh.WriteLine("y");
 Console.WriteLine(ssh.ReadResponse());
于 2012-03-25T03:54:42.670 回答