Lanzar comandos desde Java

publicado por: Anonymous

Intento lanzar desde Java un comando en Linux con sudo y no encuentro la manera. He intentado lo siguiente, pero… a pesar de que desde la terminal funciona, desde la ejecución de mi programa no.

public Boolean activarServicio(){
    lanzarComando();
    Boolean finaly = false;
    try{
        if(!estado){
            consola2=Terminal.lanzarComando("teamviewer --daemon enable");
            //consola2=Terminal.lanzarComando("echo mipassword | sudo -S teamviewer --daemon enable");
            finaly = true;
        }
    }catch(IOException err){
    }
    return finaly;
}

¿Alguien tiene alguna idea de cómo resolver esto?

solución

En SO en inglés hay dos soluciones a una pregunta equivalente:

La primera, sencilla pero muy desaconsejada porque expone la contraseña, es la siguiente:

public static void main(String[] args) throws IOException {

    String[] cmd = {"/bin/bash","-c","echo password| sudo -S ls"};
    Process pb = Runtime.getRuntime().exec(cmd);

    String line;
    BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }
    input.close();
}

La segunda, más segura, es editar /etc/sudoers con visudo y dar a tu usuario el permiso NOPASSWD para un script específico que realiza la tarea que necesitas:

nombre_de_usuario ALL=(ALL) NOPASSWD: /opt/mi-script.sh
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *