Mehrere Befehle mit JSch

Meine Anforderung ist wie folgt:
Ich habe den login auf Unix-Rechner mit meinen Zugangsdaten und einmal einloggen, das muss ich sudo für die verschiedenen Benutzer. Einmal sudo erfolgreich ist, habe ich zum aufrufen von shell in nohup. Nach Abschluss der Ausführungen, engen Kanal und Sitzung beide.

Ich versuchte den ersten Schritt, die Verbindung mittels sudo-Kommando, aber ich weiß nicht, wie zum aufrufen von shell-Skript nach dem sudo-Befehl.

In der unten code ich bin in der Lage, sudo-Kommando, aber nachdem ich sudo-Zugriff, wie kann ich eine shell ausführen im nohup mit Benutzer masteruser. So, die erforderlichen Dateien erstellt meine shell hat der Eigentümer als 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, 0, 1024);
                if (i < 0)
                    break;
                System.out.print(new String(tmp, 0, 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();
    }

}

InformationsquelleAutor user1251973 | 2013-06-27

Schreibe einen Kommentar