Supply SU password in a bash script, within the script?

4

The purpose is to restart the machine if it doesn't get an abort command from the user. The problem is that the way the terminals are set up, user must supply SU password for shutdown, init, reboot, etc. commands. We are wondering if it's possible to supply password in bash script itself, maybe using stdin. i.e.:

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

We are going to try putting the password in a file and stdin that.

Edit: sudo and expect are out as solutions as getting them installed will be impossible due to a massive amount of paperwork for permission and a limited timeframe. Also we would like to use init 6 or shutdown -r rather than reboot.

Kendall

Posted 2012-08-08T01:50:00.483

Reputation: 363

Answers

2

You can configure sudo to allow any user to run certain commands you specify, as root, without having to type a password. See this Server Fault article for a description of how to configure sudo.

Then, in your script, use sudo rather than su:

sudo reboot

Mox

Posted 2012-08-08T01:50:00.483

Reputation: 589

That isn't an option with our current setup, sudo is not installed, and I'm just learning Expect is also out of the question, as getting them installed on all the legacy terminals on our network is near impossible. – Kendall – 2012-08-08T12:36:51.763

1

AFAIK you cannot do what you are asking for. When you are using stdin with <, the password will be input via stdin much before the shell actually asks for the password. You should try and use sudo. If not, your best bet is to chmod reboot and give yourself execute privileges.

darnir

Posted 2012-08-08T01:50:00.483

Reputation: 657

0

You can do it using 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)

jrm

Posted 2012-08-08T01:50:00.483

Reputation: 101