Linuxワークステーションに接続し、sudoでコマンドを実行し、コマンドが完了するまでブロックするJavaコードを作成しようとしています。
session.getOutputStream().write("sudo -s \n".getBytes());
session.getOutputStream().write(command.getBytes());
session.getOutputStream().write("\n exit\n".getBytes());
IOStreamConnector output = new IOStreamConnector();
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
output.connect(session.getInputStream(), bos);
String theOutput = bos.toString();
プログラムが完了するか、出力を返すのを待っていないようです。
session.executeCommand(command);
IOStreamConnector output = new IOStreamConnector();
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
output.connect(session.getInputStream(), bos);
session.getState().waitForState(ChannelState.CHANNEL_CLOSED);
theOutput = bos.toString();
うまく機能しますが、sudo では機能しません。コマンドを設定してみました:
"su -c \"touch /tmp/whatever\"" (touch は私が実行しているコマンドではなく、テストのために使用しているだけです。) これは機能しません。
「sudo touch /tmp/whatever」これは機能しません。
これを行うための魔法の公式は何ですか???? 前もって感謝します。