ssh 経由で接続し、コマンドを実行して応答を取得できるコードがあります。正常に動作しますが、非対話型コマンド (実行直後に結果が返される:ls
など) に対してのみです。df
問題は、インタラクティブなコマンドのようなものを実行しようとしているとき、top
またはpasswd
コードが応答を永遠に待っているときです (もちろん何も取得しません)。
対話型コマンドに対処するには? 私は本当に出力を気にしません。ただ実行したいだけです。
public String runCommand(String command) throws Exception {
// SSH Channel
ChannelExec channelssh = (ChannelExec) session.openChannel("exec");
// Execute command
channelssh.setCommand(command);
channelssh.connect();
InputStream inputStream = channelssh.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null)
{
stringBuilder.append(line);
stringBuilder.append('\n');
}
channelssh.disconnect();
return stringBuilder.toString();
}