1

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();   
}
4

1 に答える 1

1

1, ChannelShell を使用できます。次に例を示します: Shell.java。そして、この投稿では、exec と shell の違いを明確にしています: jsch ChannelExec と ChannelShell の正確な違いは何ですか?

2、ChannelExec.setPty(true)を試してみました。このようにして、出力を得ることができました。しかし、それは止まりませんでした。

于 2013-03-06T16:49:13.190 に答える