Fornece a senha do SU em um script bash, dentro do script?

4

O objetivo é reiniciar a máquina se ela não receber um comando de interrupção do usuário. O problema é que, como os terminais são configurados, o usuário deve fornecer a senha do SU para os comandos shutdown , init , reboot , etc. Estamos nos perguntando se é possível fornecer senha no próprio script bash, talvez usando stdin. ou seja:

#!/bin/bash
# (script)
echo "Terminal will restart in 60s, Ctrl+C to cancel."
sleep 60
su - root -c "init 6" < "password"

Vamos tentar colocar a senha em um arquivo e colocar isso.

Editar: sudo e expect estão descartados, pois soluções impossíveis de instalá-los serão impossíveis devido a uma enorme quantidade de documentos para permissão e um período de tempo limitado. Também gostaríamos de usar init 6 ou shutdown -r em vez de reboot .

    
por Kendall 08.08.2012 / 03:50

3 respostas

2

Você pode configurar sudo para permitir que qualquer usuário execute determinados comandos que você especificar, como root, sem precisar digitar uma senha. Veja este artigo de falha do servidor para obter uma descrição de como configurar sudo .

Em seguida, no seu script, use sudo em vez de su:

sudo reboot

    
por 08.08.2012 / 04:15
1

AFAIK você não pode fazer o que está pedindo. Quando você estiver usando stdin com < , a senha será inserida via stdin muito antes que o shell realmente solicite a senha. Você deve tentar usar o sudo. Se não, sua melhor aposta é chmod reboot e se dê privilégios de execução.

    
por 08.08.2012 / 15:57
0

Você pode fazer isso usando socat:

user@host$ (sleep 1; echo SuperSecr3t) | socat - EXEC:'su -c id',pty
Password: ### No input here, just wait 1sec
uid=0(root) gid=0(root) groups=0(root)
    
por 10.03.2015 / 04:46

Tags