Write the prompt to the standard error and read the password from the standard input instead of
using the terminal device. The password must be followed by a newline character.
so you can use:
echo <myPassword> | sudo -S su <someuser>
Edit: This above did not work on a testing Ubuntu. It seems like the second command “su ” is to fast after prompting password query.
I did a workaround to wait a second so the echoed password could be filled in, and then second sudo should be able, to run
sudo su - foobar:
echo "password" | sudo -S sleep 1 && sudo su - foobar
expect. A stub command may be like this:
expect -c ' log_user 0 spawn /usr/bin/sudo su - someuser expect "*: " send "thepassword\n" interact '
See this answer to a similar question.
Another approach is with
- Create a file, say
- Make the file accessible only to you:
chmod go-rwx pass.
- Make it executable to you:
chmod u+x pass
Edit the file and make it a script that prints your password:
#!/bin/sh printf '%s\n' 'yourpassword'
Now you can do this:
SUDO_ASKPASS="./pass" sudo -A su - someuser
Note: in this case you provide password for
sudo (not for
su); use the one
Can you use the
:NOPASSWD option of sudo so you don’t need a password. Like:
%wheel ALL=(ALL) NOPASSWD: ALL in /etc/sudoers