使用sudo的jsch多命令

时间:2018-03-26 13:12:53

标签: java ssh sudo jsch apache-commons-net

需要使用我的id登录,执行以下命令

  1. sudo su - tstusr
  2. 执行脚本:./ app / t1.sh status

       String sudoCommand ="sudo su - tstusr";
       List commands = new ArrayList();
       commands.add("./app/t1.sh status")
        try {
        channel = (ChannelExec) session.openChannel("exec");
        channel.setPty(true);
    
        channel.setCommand(sudoCommand);
        channel.connect();
        List<String> resultString = null;
        for (String command : commands) {
            result = new ArrayList<>();
            OutputStream out = channel.getOutputStream();
            InputStream in = channel.getInputStream();
            InputStream err = channel.getErrStream();
            out.write((command.concat("\n")).getBytes());
            out.flush();
            resultString = readStream(channel, in, true);
            LOGGER.debug("execute command {} o/p  {} ",commands, resultString);
            result.addAll(resultString);
        }
    
    } finally {
        if (channel != null) {
            channel.disconnect();
        }
    
    }
    
  3. 执行时使用/app/t1.sh挂起:没有文件或目录。 上述文件由&#34; tstusr&#34;提供并拥有。并且似乎setcommand没有完成导致错误的sudo su - 命令。

    输出:

    20:28:13.492 INFO  o.t.u.r.repoImpl- Output stream execution ./app/t1.sh start
    -bash: ./app/t1.sh: No such file or directory
    [tstusr@hosrtch102 ~]$ 
    

    @Update 此错误我只能在调试模式下看到并在channel.connect()行之后保留此调试器。这意味着内部需要一点延迟似乎

    我尝试删除。来自&#34; ./ app / t1.sh&#34;的脚本面前to&#34; /app/t1.sh" ;,它没有工作,但正如所提到的,它在java的调试模式下工作正常有延迟,我应该在&#34; channel.connect&之后添加线程等待#34;

    1)我应该在channel.connect()之后添加延迟 2)在set命令中添加sudo命令后,我应该检查退出状态还是out stream,然后在out stream中提供第二个命令

0 个答案:

没有答案