JSCH的怪异行为

问题描述 投票:0回答:1

我试图使用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();



}}
java ssh jsch
1个回答
0
投票

终于找到了解决方法,我犯了一个愚蠢的错误,把会话超时时间设置为500,因为命令执行起来需要更多的时间,所以把它改成了一个更高的值,session.setTimeout(50000)。

© www.soinside.com 2019 - 2024. All rights reserved.