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 に答える