java - 无法使用 jsch 执行 sftp 子命令

标签 java linux sftp jsch

<分区>

这是我的代码,它登录到 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)

最佳答案

移动线

channelExec.connect();

在此 block 之上:

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

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

关于java - 无法使用 jsch 执行 sftp 子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52705671/

相关文章:

Java .split() 方法极端情况 : what are they?

java - 如何修改 JavaFX 8 的 DatePicker 上的月份和年份控件?

java - 检查线是否以点开头,然后将其删除

linux - 在 bash 的每一行中查找连续的空格分隔的单个字符

.net - 使用SFTP获取用户名和组名

ftp - 用于下载、重命名和移动文件的 WinSCP 脚本

java - 使用 "setlayout(null)"时小部件行为异常

Linux CLI - 光栅到矢量(追踪)

linux - 为什么MongoDB在Ubuntu 11.10安装时无法创建用户?

java - 来自 Windows Server Spring 集成的 SFTP