PrimefacesのターミナルコンポーネントとJSchを使用してリモートデスクトップにSSH接続しています。execチャネルでは、セッションとチャネルの両方が各コマンドで閉じるため、実行に時間がかかりすぎて、それを回避できませんでした。そこで、チャネルをシェルに変更し、標準の入力/出力スチームを「リダイレクト」しようとしています。これが私のコードがどのように見えるかです:
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@ManagedBean
@SessionScoped
public class TerminalController implements Serializable{
public TerminalController(){
jsch=new JSch();
InputStream in=null;
PrintStream out=System.out;
try{
session=jsch.getSession(user, ip, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(passwd);
session.connect();
channel=session.openChannel("shell");
channel.setInputStream(in);
channel.setOutputStream(out);
channel.connect();
}catch(Exception ee){
System.out.println(ee);
} }
public String handleCommand(String command, String[] params) {
command=command+StringUtils.join(params," ");
in=IOUtils.toInputStream(command);
String result=out.toString();
out.flush();
return result;}
私はそれが混乱していることを知っています、私はまだJavaの初心者です。私が考えたもう1つの問題は、iostreamからstringへの変換で、Enterボタン機能が失われる可能性があることです。私はあなたの提案、解決策、アドバイスを待っています。