2011-06-07 1 views
0

他のマシンにsshを作るこの方法があるとします。そのマシンの端末からの出力をホストマシンに戻すにはどうすればいいですか?java runtim.execをsshに使用する場合、そのリモートマシンのコンソール出力を取得するにはどうすればよいですか?

public void getSSHreply() 
    { 
    Process p; 

    // Set up the arguments for ProcessBuilder 
    String[] cmd = 
    { 
     "/usr/bin/ssh", 
     "someRemoteMachine", //This machine will authenticate with keys, hence no pw needed 
     "./myprog", 
    }; 

    try 
    { 
      p = Runtime.getRuntime().exec(cmd); 

      //How would I redirect stdout back to host machine? 
      StringBuffer s = new StringBuffer(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 

      while (input.readLine() != null) 
      { 
       s.append(input.readLine() + "\n"); 
      } 

      System.out.println(s.toString()); 


    } 
    catch (IOException e) 
    { 
      System.err.println("Failed to read & or start "); 
    } 

    } 

答えて

0

Processオブジェクトには、STDOUTSTDERR、およびSTDINストリームを取得する方法があります。 (例:getOutputStream())。

のようなツールを使用して、データをリダイレクトするための便利な方法や、外部プログラムを起動するには、commons-execを参照してください。

0

残念ながらあなたはできません。最も単純な方法はおそらく、pのinputStreamとerrorStream(通常は2つの別々のスレッド)を読み込むことです。

私は、あなたがBufferedReaderを使用しているので、SSHが "Password:"プロンプト(終端改行を持たない)を表示しているので、直ちに問題が起こると思うのですが、Bufferedreaderはinput.readLine ()呼び出し。

一番簡単なのは、一度に1文字ずつ入力することです(もっとも効率的ではありませんが)。

また、stderrストリームも読んでほしいでしょう。なぜなら、2つのスレッドが必要な理由があります。

+0

これに少し入ることができますか?これは前にやりたかったことです。 –

+0

私はパスワードを必要としません。私は鍵で認証します。 – stackoverflow