2012-03-16 12 views
0

Ganymede ssh2を使用してJavaアプリケーションからサーバーに接続し、そこでいくつかの作業を行います。
これは完全に動作しますが、問題は承認を要求するsshコマンドです(例: コマンドGanymed ssh2:コマンドラインでプロンプトを表示する方法(y/n)

stop someService 

戻り

Are you sure (y/n)? 

と適切なキーストローク(Y/N)の後に、それは上に移動します。

現在、私はこのようになめらか、SSH2 ganymed例で与えられた実装を使用しています:( 'someServiceを停止')上記のコマンドを述べて、このutilのクラスを呼び出した後

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import ch.ethz.ssh2.Connection; 
import ch.ethz.ssh2.Session; 
import ch.ethz.ssh2.StreamGobbler; 

public class ConnectUtil(String hostname, String username, String password, String command) 
{ 

    try 
    { 
     Connection conn = new Connection(hostname); 
     conn.connect(); 

     boolean isAuthenticated = conn.authenticateWithPassword(username, password); 

     if (isAuthenticated == false) 
      throw new IOException("Authentication failed."); 

     Session sess = conn.openSession(); 

     sess.execCommand(command); 

     InputStream stdout = new StreamGobbler(sess.getStdout()); 

     BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

     while (true) 
     { 
      String line = br.readLine(); 
      if (line == null) 
       break; 
      System.out.println(line); 
     } 
     sess.close(); 
     conn.close(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(System.err); 
    }  
} 

、それは

でstuckedます
String line = br.readLine(); 

サーバーのタイムアウト後にすべてが壊れます。

この問題を解決する方法についてのアイデアは歓迎されるものではありません。

ありがとう、 ミロス。

答えて

1

SessionにはgetStdin()メソッドがあると仮定すると、その質問に対する応答を書き込む必要があります。

どちらかといえば、入力が要求されるコマンドがプロンプトを出さない「非対話型」モードを持っているかどうかを調べる。

+0

は残念ながら、プロンプトは表示されません。このコマンドにはモードがありません。しかし、 'Session'オブジェクトには 'getStdin()'があります。私はそれを使用しようとしましたが、それを使用する方法を理解することはできません。これは私が追加したコードです: '\t \t \tセッションsess = conn.openSession(); \t \t \t sess.execCommand(コマンド); (35)。 \t \t \t \t \t \t InputStream stdout = new StreamGobbler(sess.getStdout()); \t \t \t \t \t \t BufferedReader br = new BufferedReader(new InputStreamReader(stdout));間違ったことがありますが、何を知らないのですか? – trivunm

+0

申し訳ありませんが、私が追加したコードは次のとおりです: 'Session sess = conn.openSession(); \t \t \t sess.execCommand(コマンド); (Y)。0122getBytes()); \t \t \t \t \t \t InputStream stdout = new StreamGobbler(sess.getStdout()); \t \t \t \t \t \t BufferedReaderのBR =新しいをBufferedReader(新しいInputStreamReaderの(STDOUT)); ' – trivunm

+0

は、キャリッジリターンに – artbristol

0

execの代わりにstdinを使用する場合は、まずsession.startShell()を実行する必要があります。 FAQを読んでください。私はこのコードを使用

-1

...

sess.executeCommand("ena"+'\n' +"pass"+'\n' +"exit"+'\n'); 
関連する問題