如何使用SharpSSH执行linux命令,提示输入其他内容?

时间:2012-03-25 03:49:47

标签: c# ssh console sharpssh

好的,我正在尝试做什么

我必须设置一个到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 [enter] y [enter]

但它不起作用,就好像它仍然在为

的输入而烦恼
[root@host ~]# rm vivek
rm: remove regular file `vivek'?

我在这里做错了什么?

希望问题很明确。

P.S我再次尝试了SSHExec样本同样的结果。

1 个答案:

答案 0 :(得分:1)

为什么不做rm vivek -f以避免确认?

否则,只需预期问题并在阅读回复之前回答:

 ssh.Write(byt);
 ssh.Expect("rm: remove .*");
 ssh.WriteLine("y");
 Console.WriteLine(ssh.ReadResponse());