首页 > 解决方案 > 无法使用 jsch 执行 sftp 子命令

问题描述

这是我的代码,它登录到 sftp 服务器并执行命令“dzdo su - ibmusr”命令并更改文件夹的路径并执行 ls 命令。这是代码

public class Sudo{
  public static void main(String[] arg) throws Exception{

      int port=22;
      String name ="john";
      String ip ="xxxx";
      String password ="root";

      JSch jsch = new JSch();
      Session session = jsch.getSession(name, ip, 22);
      session.setPassword(password);
      session.setConfig("StrictHostKeyChecking", "no");
      System.out.println("Establishing Connection...");
      session.connect();
      System.out.println("Connection established.");

      ChannelExec channelExec = (ChannelExec)session.openChannel("exec");

      InputStream in = channelExec.getInputStream();


      channelExec.setCommand("dzdo su - john");
      OutputStream out = channelExec.getOutputStream();
      out.write(("cd /xx.yy/zz \n").getBytes());

      out.write(("ls \n").getBytes());
      out.flush();
      channelExec.connect();

      BufferedReader reader = new BufferedReader(new InputStreamReader(in));
      String line;
      int index = 0;
      StringBuilder sb = new StringBuilder();
      while ((line = reader.readLine()) != null)
      {
          System.out.println(line);
      }
      session.disconnect();
  }
}

我低于异常

Exception in thread "main" java.io.IOException: failed to initialize the channel.
    at com.jcraft.jsch.Channel$1.init(Channel.java:242)
    at com.jcraft.jsch.Channel$1.write(Channel.java:253)
    at java.io.OutputStream.write(OutputStream.java:75)
    at com.consol.citrus.samples.todolist.Sudo.main(Sudo.java:43)

标签: javalinuxsftpjsch

解决方案


移动线

channelExec.connect();

在此块上方:

 OutputStream out = channelExec.getOutputStream();
 out.write(("cd /xx.yy/zz \n").getBytes());
 out.write(("ls \n").getBytes());
 out.flush();

因此,您首先建立连接,然后获取输出流。


推荐阅读