未执行使用 ChannelExec 的命令 - Jsch

朱莉娅·贝尔

我正在使用 Jsch 在服务器中创建一个文件并执行一些命令。对于文件创建,它工作正常,但是,对于命令执行,则不然。它保持状态 -1(仍在处理它)并永远保持在那里。这发生在 shell 执行或当我尝试成为 root 时。按照下面使用的方法:

public void upload(String localPath) throws IOException {
    Session session = connectToServer();
    System.out.println("In upload");
    ChannelSftp channelSftp = getChannelToSftpServer(session);

    //Creating file in temporary location
    File f = new File(localPath);
    FileInputStream fi = new FileInputStream(f);

    // Creating file on server and setting the permissions to the user (chmod 777)

    if (channelSftp != null) {
        try {
            System.out.println("Change working in temp directory");
            changeWorkingDirectory(channelSftp, TEMP_PATH);
            
            ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
            //THE PROBLEM ALSO HAPPENS WHEN EXECUTING A SHELL WITH THIS COMMAND INSIDE
            channelExec.setCommand(
                "root command (using pbrun) <command is here, confidential> "); 
            InputStream commandOutput = channelExec.getInputStream();
            channelExec.connect();

            StringBuilder outputBuffer = new StringBuilder();
            int readByte = commandOutput.read();

            while(readByte != 0xffffffff)
            {
               outputBuffer.append((char)readByte);
               readByte = commandOutput.read();
               System.out.println(outputBuffer);
            }
            System.out.println("Root connected.");
            channelExec.disconnect();
            
            channelSftp.put(fi, f.getName());
            channelSftp.chmod(0777, localPath);
            channelSftp.chown(123, localPath);
            channelSftp.chgrp(123, localPath);
            
            System.out.println("File configurations changed.");
            
            //Copying to the official path
            channelExec = (ChannelExec) session.openChannel("exec");
            channelExec.setCommand("mv /tmp/"+f.getName()+" "+path);
            channelExec.connect();
            System.out.println("File is completed and ready!");
            
            while (channelExec.getExitStatus() == -1) {
                Thread.sleep(1000);
                
            }
            channelExec.disconnect();

        } catch (SftpException e) {
            e.printStackTrace();
            throw new IOException(e.getStackTrace() + "");
        } catch (JSchException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            disconnectChanneltoSftpServer(channelSftp);
            session.disconnect();
            fi.close();
            // Deletes the local File.
            f.delete();
        }
    }
}

我究竟做错了什么?先感谢您。

马丁·普里克里尔

你必须先打电话getInputStream()再打电话connect()

实际上,您最好同时阅读 stderr 和 stdout 以获取错误信息。
为此,请参阅我对如何读取 JSch 命令输出的回答

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

channelExec.setCommand() 在执行 shell 命令时不起作用

来自分类Dev

JSch中断命令执行

来自分类Dev

JSch中断命令执行

来自分类Dev

使用JSch执行命令

来自分类Dev

无法使用 jsch 执行 sftp 子命令

来自分类Dev

我的JSch会话不执行命令

来自分类Dev

shell提示使用jsch触发多个命令

来自分类Dev

无法使用jsch运行top命令

来自分类Dev

在JSch(ssh)中使用root命令

来自分类Dev

使用Java中的JSch exec从ArrayList执行命令列表

来自分类Dev

使用JSch在远程SSH会话上运行telnet命令

来自分类Dev

如何使用JSch将多行命令输出存储到变量

来自分类Dev

如何使用JSch从Java执行交互式命令并读取其稀疏输出

来自分类Dev

如何执行使用echo和sed生成的shell命令?

来自分类Dev

Jsch执行SQL查询

来自分类Dev

在JSch中使用“ exec”通道运行命令不会返回任何输出

来自分类Dev

使用JSch从SSH服务器读取命令的输出时,遇到了不想要的字符

来自分类Dev

如何使用Java中的JSch SSH会话使用需要交互式终端的命令行* nix命令?

来自分类Dev

如何在Java中通过JSch SSH会话使用需要交互式终端的命令行* nix命令?

来自分类Dev

JSch问题-无法检索完整的命令输出

来自分类Dev

JSch:在多级ssh之后运行命令

来自分类Dev

使用JSch拒绝权限

来自分类Dev

对特定行使用sed命令

来自分类Dev

从命令行使用动态参数执行PHP文件

来自分类Dev

在调用可执行文件时查找命令行使用的路径

来自分类Dev

Unix复制和JSch命令在SFTP时产生冲突

来自分类Dev

Jsch-通过SSH连接发送命令

来自分类Dev

如何在集成测试中测试JSch scp命令?

来自分类Dev

Jsch-通过SSH连接发送命令

Related 相关文章

热门标签

归档