我试图使用JSH库通过SSH执行多个命令,但遇到一个奇怪的问题,当我试图在eclipse中运行程序时,代码完成了执行,但命令(mkdir test)没有在服务器中执行,但当我一步步调试时,命令被执行,文件夹被创建。代码如下。
public static void runCommand() throws JSchException, IOException{
JSch jsch=new JSch();
Session session=jsch.getSession("user","linuxip",22);
List<String>commandList=new ArrayList<String>();
commandList.add("cd deploy");
commandList.add("mkdir test");
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
session.setTimeout(500);
System.out.println("Connecting..");
Channel channel = session.openChannel("exec");
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setCommand("sudo su - wsp ");
System.out.println("connected..");
// channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
// InputStream in = channel.getInputStream();
((ChannelExec) channel).setPty(true);
channel.connect();
channel.setOutputStream(System.out);
for(String command:commandList) {
out.write((command+"\n").getBytes());
}
out.write(("exit"+"\n").getBytes());
out.flush();
out.close();
channel.disconnect();
session.disconnect();
}}
终于找到了解决方法,我犯了一个愚蠢的错误,把会话超时时间设置为500,因为命令执行起来需要更多的时间,所以把它改成了一个更高的值,session.setTimeout(50000)。