微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用JSch的多个命令

我的要求如下:
我必须使用我的凭据登录Unix框,登录后,我必须对不同的用户做sudo.一旦sudo成功,我必须在nohup中调用 shell.完成执行后,关闭通道和会话.

我尝试了使用sudo命令连接的第一步,但我不知道如何在sudo命令之后调用shell脚本.

在下面的代码中,我能够执行sudo命令,但在获得sudo访问权限后,如何在用户masteruser中执行nohup中的shell.因此创建所需的文件我的shell将所有者作为masteruser.

public class SSHUploader {

    Session session = null;

    public SSHUploader(){

    }

    public void connect(){
    try {

            JSch jsch = new JSch();
            session = jsch.getSession("user","xxx.xxx.xx.xx",22);
            session.setPassword("test");
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking","no");
            session.setConfig(config);
            session.connect();
        } catch (Exception ex) {
            ex.printstacktrace();
        }
    }

    public void executeCommand(String script) throws JSchException,IOException{
        System.out.println("Execute sudo");
        String sudo_pass = "test";
        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        ((ChannelExec) channel).setCommand( script);

        InputStream in = channel.getInputStream();
        OutputStream out = channel.getoutputStream();
        ((ChannelExec) channel).setErrStream(System.err);

        channel.connect();
        out.write((sudo_pass + "\n").getBytes());
        out.flush();

        byte[] tmp = new byte[1024];
        while (true) {
            while (in.available() > 0) {
                int i = in.read(tmp,1024);
                if (i < 0)
                    break;
                System.out.print(new String(tmp,i));
            }
            if (channel.isClosed()) {
                System.out.println("exit-status: " + channel.getExitStatus());
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (Exception ee) {
                System.out.println(ee);
            }
        }
        channel.disconnect();
        System.out.println("Sudo disconnect");
    }

    public void disconnect(){
        session.disconnect();
    }


    public static void main(String... args) throws JSchException,IOException {

        SSHUploader up = new SSHUploader();
        up.connect();

        up.executeCommand("sudo -u masteruser bash");

        up.disconnect();
    }

}

解决方法

要按顺序执行多个命令,可以创建如下命令字符串:
String script ="pbrun su - user; cd /home/scripts;./sample_script.sh”

执行它并将此字符串传递给上面的方法.

原文地址:https://www.jb51.cc/java/127180.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐