我正在使用 Primefaces 的终端组件和 JSch 来 ssh 到远程桌面。使用 exec 通道执行需要花费太多时间,因为会话和通道都会在每个命令处关闭,而我没有设法避免这一点。所以我将频道更改为 shell,现在我正在尝试“重定向”标准输入/输出蒸汽。这是我的代码的样子:
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的初学者。我想到的另一个问题是,在从iostream到字符串的转换中,我可能会丢失回车按钮功能!我正在等待您的建议、解决方案和建议。