C# 如何使用SharpSSH来执行提示额外输入的linux命令?
好的,这就是我要做的 我必须设置一个到linux机器的SSH会话,并发出像“ls”或cp这样的命令 这是片段C# 如何使用SharpSSH来执行提示额外输入的linux命令?,c#,ssh,console,sharpssh,C#,Ssh,Console,Sharpssh,好的,这就是我要做的 我必须设置一个到linux机器的SSH会话,并发出像“ls”或cp这样的命令 这是片段 SshStream ssh = new SshStream ("myhost","root","pass"); ssh.Prompt ="#"; ssh.RemoveTerminalEmulationCharacters = true; byte[] byt = System.Text.En
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样本,结果相同。为什么不做
rm vivek-f
,以避免确认
否则,在阅读回答之前,请期待问题并回答:
ssh.Write(byt);
ssh.Expect("rm: remove .*");
ssh.WriteLine("y");
Console.WriteLine(ssh.ReadResponse());
好主意+1但它只解决了“rm”的问题,如果我在配置路由器时必须与IOS对话,而命令并不总是有这些选项。。。这是我的根本问题请不要误会我,我只是在解释我的问题你必须把它看作一个对话。你发送一些东西,你期待一些东西,你发送一些其他的东西,等等。