2012-03-25 63 views
2

好吧继承人我正在尝试做什么如何使用SharpSSH执行提示输入附加输入的linux命令?

我必须设置一个SSH会话到一台linux机器并发出一个像“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命令

需要addtional acknowledement像“y”

正如你可以从上面的代码片段看到的,代码本质上产生了一个字节序列,如

RM维韦克[进入] Y [进入]

但它不工作,它是作为如果在

[[email protected] ~]# rm vivek 
rm: remove regular file `vivek'? 

仍然瓦亭为输入什么我错在这里做什么?

希望问题清楚。

P.S我已经尝试了SSHExec示例再次获得相同的结果。

回答

1

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

否则,只是希望这个问题并读取响应之前回答这个问题:

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

高招! +1但它只解决了“rm”这个问题,如果我配置一台路由器,而且我必须与IOS进行通信,而命令并不总是有这些选项......那就是我的根本问题..请不要误解我的意思,我只是在解释我的问题 – 2012-03-25 04:00:13

+0

您必须将其视为一个对话框。你发送了一些东西,你期望的东西,你发送别的东西,等等。 – Diego 2012-03-25 04:03:19

+0

会试一试! – 2012-03-25 04:03:43