martes, 11 de enero de 2011

Ejecutar scripts con sudo sin introducir contraseña

Me gusta tener siempre algún que otro script en mi ordenador para realizar tareas sencillas.

Pero cuando quiero ejecutar algo como root necesitas ir metiendo siempre la contraseña.

Existen varios métodos para que el comando sudo no te pida la contraseña. Por ejemplo editando sudoers (man sudoers) e incluyendo las aplicaciones que queramos.

Pero una forma mucho más sencilla es haciendo lo siguiente:
echo "password" | sudo -S comando
Por ejemplo, yo tengo un script para actualizar el sistema rápidamente que se llama actualizar:

echo "password" | sudo -S apt-get update && sudo -S apt-get -y dist-upgrade
Lo único que hago es crearme este archivo (con vi o con gedit), darle permisos de ejecución (sudo chmod +x actualizar) y crear un acceso directo al panel, de forma que con un solo click se actualiza todo el sistema él solito.

¿A qué es muy sencillo? Eso sí, puede tener problemas de seguridad (si alguien te pilla ese archivo... ¡la has cagado!). Así que usa este método con precaución.

6 comentarios:

  1. Creo que habría una alternativa mejor: Editando los permisos de sudo (sudo visudo). Lo explican detalladamente en el siguiente enlace:

    http://askubuntu.com/questions/155791/how-do-i-sudo-a-command-in-a-script-without-being-asked-for-a-password

    Un saludo.

    ResponderEliminar
  2. Oye muchisisimas gracias, soy nuevo en el mundo linux y la verdad es que si es algo inquietante y algo desesperante realizar la misma tarea con los privilegios de superusuario. En mi caso tengo un programaita descargado de microchip el pickit2-linux, al que un super programdor le hizo una GUI en java, pero este necesita permiso de sudo para ejecutarse :V
    Y gracias a tu post esto se me hizo muchisisimo super facil. Te agradezco tu tiempo en postear esto :D

    ResponderEliminar
  3. Tengo este codigo en java, la contraseña entra como parametro letras en mayusculas

    import java.awt.Robot;

    import java.awt.event.KeyEvent;

    import java.util.*;

    import java.lang.reflect.Field;

    import java.awt.event.*;

    import javax.swing.*;

    public class key {



    public static void main(String[] argus) {

    try {



    Robot robot = new Robot();

    robot.delay(100);

    for (int x=0;x<argus[0].length();x++){

    char aux= argus[0].charAt(x);

    int keyCode = (int) aux;

    robot.keyPress( aux );

    robot.keyRelease( aux );}

    robot.keyPress(KeyEvent.VK_ENTER);

    robot.keyRelease(KeyEvent.VK_ENTER);

    } catch (Exception e) {

    System.out.println(e);

    }

    }

    }

    ResponderEliminar
  4. Tengo una amiga a la que le puse ubuntu 16.04 y últimamente, al iniciarlo, las más de las veces, no detecta redes wifi. Le enseñé a hacer esto en consola: "sudo service network-manager restart". Pero se lía (es muy mayor).

    Ahora le pondré este script en el escritorio (con permiso de ejecución). A mí me funciona.

    #!/bin/bash
    # -*- ENCODING: UTF-8 -*-
    echo "contraseña" | sudo -S service network-manager restart
    exit

    ResponderEliminar
  5. Hola, tengo un amigo que me paso este link para solventar un "pequeño" porblema que a ver is a modo de reto me ayudais a solventar.
    Lo primero todo se basa en openssh de w10 lo digo por si acaso.
    Empiezo
    Tengo un Nas con de sinology el cual puedo encender con WOL por remoto sin problemas. lo malo es apagarlo...
    He intentado de todo y con script cmd lo he comseguido pero de forma manual , no hay manera de hacer un bat automatizado.
    Se puede con putty (plink) y con ssh pero en ambas debo cambiar de usuario admin a root con sudo -i y poner el password manual para posterioremte indicar un poweroff y listo
    la secuemcia es esta para ssh
    ssh 192.168.1.36 -l admin
    (entonces sale)
    admin@192.168.1.36's password:
    (pones password)
    admin@SYNOLOGY:~$ sudo -i
    password:
    (pones password)
    root@SYNOLOGY:~#
    ( y ahi comando poweroff y perfecto)
    como decia el porblema es secuenciar todo en una solo linea para hacer un bat o lo que sea para ejecutar

    ResponderEliminar