2016-12-22 12 views
0

私は複数のマシンでやっているいくつかのタスクを自動化したいと思います。この作業にGanymedのSSH2ライブラリを使用したいと思います。私はすでに複数のコマンドを実行して、サーバからの応答を得ることができます。事はあなたが唯一の私は、メソッドを実行する理由はセッションごとに1つのコマンドを実行することができるということです、私は複数のコマンドのための一つの方法を使用することを可能にするために、次のようになりますことは、私はにできないように見えるということですガニッシュSSH - ユーザーの変更

public String execCmd(String cmd) throws IOException { 
    sess = conn.openSession(); 
    sess.execCommand(cmd); 
    InputStream stdout = new StreamGobbler(sess.getStdout()); 
    BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 
    String result = br.readLine(); 
    br.close(); 
    sess.close(); 
    return (result); 
} 

"su" +ユーザー名を使ってユーザーを変更してください。私は "su"コマンドがこの問題の結果として新しいシェルを開くことを読んでいます。

今、これを解決する最もクリーンな方法は何ですか?私はこのライブラリを使ってシェルを開く可能性について読んだが、書き込むことができず、その例を見つけることができなかったようだ。

ありがとうございます。

+0

複数のコマンドを実行する場合。疑似端末を要求してシェルを起動する必要があります。コマンドはSession.requestPTY()とSession.startShell()です。 –

+0

@ Mr.Stefと私はこのシェルにどのように書き込もうとしていますか?セッションを使用して私はコマンドを実行するオプションがありましたが、これは私が思うシェルにとっては当てはまりません –

+0

あなたはアウトストリームを取得する必要があります。 outstream = this.session.getStdin()を呼び出すと、Writerを使用できます。最後のBufferedWriter bufferedWriter = new BufferedWriter(新しいOutputStreamWriter(this.outputStream)); –

答えて

0

複数のコマンドを実行する場合。擬似端末を要求してから、シェルを起動する必要があります。セッションオブジェクトから、アウトストリームを取得してコマンドを実行します。

... 
    sess.requrequestPTY(); 
    sess.startShell(); 
    Outstream outstream = sess.getStdin(); 
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outstream)); 
    final String cmd = new String(command); 
    bufferedWriter.write(cmd); 
    bufferedWriter.flush(); 
    ... 
+0

オクラホマ、私はそれを得ているが、私はそうではない。どのように書き込むのですか? bufferedWriter.write( "sudo reboot")を使用します。結果は何もない。この問題は、私が思った以上に私を混乱させている –

+0

あなたは作家を洗い流しますか?私は答えに完全なコードを追加します。 –

+0

こんにちは、お返事ありがとうございます。私はシェルを使ってコマンドを送る方法を考え出しました:sess.requestPTY( "bash"); sess.startShell(); BufferedWriter wr = new BufferedWriter(新しいOutputStreamWriter(sess.getStdin()、 "utf-8")); wr.write( "エコーテスト\ n"); しかし、私は、サーバーからの出力、任意のアドバイスを得ることができないようですか?どうもありがとう! –

関連する問題