comando sudo e como obter automaticamente a senha

4

Eu tenho um problema que:

Eu tenho um arquivo .sh

    #!/bin/bash 

var=$(zenity --forms --title="Tắt giờ vợ yêu nhé" \
    --text="Vợ muốn tắt máy sau bao nhiêu phút nữa" \
    --separator="," \
    --add-entry="Vợ điền số vào đây")
case $? in
    0)  sudo shutdown -h $var           
    ;;
    1)
        exit 0;;
    -1)
        echo "An unexpected error has occurred."
    ;;
esac

Como o comando sudo pode preencher automaticamente a senha a partir do comando echo ou de um arquivo. Eu li sobre sudo -S opções, mas eu não sei como funciona. Qualquer um pode dar um exemplo sobre isso! Valeu pessoal

    
por user108988 13.12.2012 / 16:36

2 respostas

6

É melhor alterar as regras do sudo em vez de armazenar a senha clara em um arquivo de texto:

Crie um novo arquivo como /etc/sudoers.d/script_rights e pressione

%user ALL = NOPASSWD:/sbin/shutdown

em que user é o usuário que permite executar o script.sh. Então o script não pedirá a senha para executar o comando de desligamento.

    
por olivierb2 13.12.2012 / 16:51
3

Não é muito seguro, só para dizer que antes de dar a resposta, já que alguém poderia apenas abrir o arquivo e ver a senha, mas aqui está como:

Suponha que queremos executar o comando sudo shutdown -h 1 , mas não queremos digitar a senha. Nós faríamos assim:

echo PASSWORD | sudo -S shutdown -h1

Por exemplo, se minha senha fosse x , seria algo como isto:

echo x | sudo -S shutdown -h1

Outro exemplo é, se eu quisesse fazer uma atualização do apt-get, então atualize sem digitar nenhuma senha. Eu faria isso:

echo x | sudo -S apt-get update && sudo apt-get upgrade

O primeiro sudo (Aquele com o parâmetro -S) irá pegar a senha da entrada padrão, neste caso, o teclado no terminal. Em seguida, ele manterá a senha para a sessão de terminal restante. Como nesta sessão estou executando 2 comandos apt-get, um com atualização e outro com upgrade, não há necessidade de digitar a senha novamente para o segundo apt-get, já que a senha está ativa para a sessão em uso. Portanto, o resto dos comandos sudo não precisarão receber outra senha até que a sessão seja fechada (até você fechar o terminal ou o script usando a senha).

    
por Luis Alvarado 13.12.2012 / 16:48

Tags