2017-07-30 3 views
1

を呼び出すために、私は、リモートのLinuxマシン上でコマンドを実行したいですremote_commandに渡す文字列を含むローカルマシン上のファイル。ローカルマシンのコマンドラインでこれを実行すると、そのコマンドがリモートマシンに正しい影響を与えることを確認できます。しかし、私は次のようにProcessBuilderをを使用してJavaアプリケーション内でこれを実行する必要があります。ProcessBuilderをとsshが1台のLinuxマシンからリモートコマンド

processBuilder = new ProcessBuilder("ssh [email protected]_server remote_command < local_script"); 
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 
processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT); 
process = processBuilder.start(); 

私はこれを行うと、私は常にエラーを取得:

のzsh:1:そのようなファイルやディレクトリはありません:LOCAL_SCRIPT

をなど

私が試してみましたバリエーション:

processBuilder = new ProcessBuilder("ssh", "[email protected]_server remote_command < local_script"); 
processBuilder = new ProcessBuilder("ssh", "[email protected]_server", "remote_command < local_script"); 
processBuilder = new ProcessBuilder("ssh", "[email protected]_server", "remote_command", "<", " local_script"); 

が、何も動作するようです。私は、pwdを実行すると、予想されるディレクトリが与えられ、ProcessBuilderを使って実行するときにcatを使ってlocal_scriptを読むことができることを検証したので、sshコマンドの処理方法とは何かを仮定しなければなりません。何か案は?

+0

AFAIK "cwd"から何かを実行するための '/ some_script' –

答えて

4

あなたは3つの選択肢があります。

  • を "<は" ProcessBuilderを( "SH"、(ないJavaのではbashによって処理されるように、 "SH" のコールでクエリをラップ - 「、 "C"
  • "< local_script"を削除し、processBuider.redirectInput()。from(new File(local_script));を使用して、データを入力に挿入してください(例:ssh xxxxx yyyy < zzz ");ストリーム
  • thridパーティライブラリを使用してjava(JSchのような)からsshを管理する
+0

第4の選択 - シェルスクリプトを使用してください(先ほどの選択肢と異なります) –

+0

ありがとうございます。私は第2の選択肢のアイデアが気に入っていますが、まだ試していません。 – user304582

関連する問題