好的,我正在尝试做什么
我必须设置一个到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样本同样的结果。
答案 0 :(得分:1)
为什么不做rm vivek -f
以避免确认?
否则,只需预期问题并在阅读回复之前回答:
ssh.Write(byt);
ssh.Expect("rm: remove .*");
ssh.WriteLine("y");
Console.WriteLine(ssh.ReadResponse());