2017-08-18 6 views
-1

誰かがこの問題に対する実際の解決策を持っているなら、私はそれを感謝します。これまで私が使ってきた実装はすべて、チャンネルの1つが「接続されている」とすぐにセッションを閉じます。ほとんどのように、sshの対話をスクリプト化する必要があることを意味します。私はまだcmd1; cmd2; cmd3;タイプのコマンドを探していません。私が考えることは、あなたがファイルシステムを探知しようとしていた場合です。java sshd multipleコマンド

各コマンドが新しいセッションの場合は、新しいセッションが1つに戻るたびにどこにも行かなくなります。

操作を入力するとsshセッションが開いたままになりますが、すべてのJava実装がこのアプローチとは大きく異なる理由は私が超えています。私は答えを見つけるカント場合は私の次のステップは、javaからのコマンドシェルを使用して、実際には、そこから相互作用の代わりに、Javaのsshのライブラリを使用して...

+0

://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.htmlまた、ここでいくつかの例を見つけることができます:https://stackoverflow.com/questions/6856028/difference-between-processbuilder- #6856659 –

+0

ありがとう、私はそれも探していたが、最終的にはpythonでparamikoを使用し、Javaプロセスと(Python)sshコンソールの間にウサギのmqインタフェースを作成するより複雑です。 –

答えて

0
public void connect() { 
    Session session; 
    try { 
     session = createConnectedSession(); 
     java.util.logging.Logger.getLogger("test").log(Level.INFO,"isConnected "+session.isConnected()); 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     Channel channel = session.openChannel("shell"); 

     channel.setOutputStream(output); 

     PrintStream ps = new PrintStream(channel.getOutputStream(), true); 
     // InputStream is = new InputStream(channel.getInputStream()); 
     channel.connect(); 
     sleep(); 
     java.util.logging.Logger.getLogger("test").log(Level.INFO,"isConnected "+session.isConnected()); 
     Stack<String> mstack = getCommandStack(); 
     //readChannel(channel); 
     while (!mstack.isEmpty()) { 
      String cmd = mstack.pop(); 
      java.util.logging.Logger.getLogger("test").log(Level.INFO,"sending command "+cmd); 
      ps.println(cmd); 
      sleep(); 
      System.out.println(output.toString()); 
      java.util.logging.Logger.getLogger("test").log(Level.INFO,"command result"+output.toString()); 
      sleep(); 
      // System.out.println(output.toString()); 
      ps.flush(); 
     } 

     channel.disconnect(); 
     session.disconnect(); 
    } catch (JSchException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

}私は良いスタートがProcessBuilderをHTTPSを使用していると思い

+0

実際に私のために働いたことは、いくつかの問題と矛盾した結果がありましたが、今は正常に動作しているようです。それはバグか本当の限界だったのかまだ分かっていませんが、私のような多くの人が同じ回答を探していたので、複数のコマンドを送信してJSChで出力を読むことができます。 –

関連する問題