Some commands do not like non-interactive mode
$ passwd <
> newpassword
> newpassword
> EOF
Changing password for user lsc.
Current password for [email protected]: passwd: Authentication token manipulation error
$ echo oraclepassword | su - oracle
standard in must be a tty
$ echo sudopassword | sudo su - oracle
[sudo] password for lsc:
sudo: sorry, you must have a tty to run sudo
But ok, if you really want to run those in a script, you have plenty of clean (no hack there) ways of doing this.
For instance, let’s use a screen called BAR.
$ xterm -e "screen -S BAR" &
[1] 31732
Now we have an interactive terminal. It could be redirected to a frame buffer device if no x server is started.
Not really a human device, but an interactive terminal.
Now let’s send stuff
$ CR="$(echo '\r')"
$ screen -S BAR -X stuff "sudo su - oracle$CR"
$ screen -S BAR -X stuff "sudopassword$CR"
$ screen -S BAR -X stuff "id > /tmp/xxx$CR"
$ screen -S BAR -X stuff "exit$CR"
$ screen -S BAR -X stuff "exit$CR"
[1] + Done xterm -e "screen -S BAR" &
$ cat /tmp/xxx
uid=100(oracle) gid=100(dba) groups=100(dba)
Usual disclaimer: it is a bad security practice to hardcode your passwords in scripts. Use this only if you really understand security. Read man openssl about how to use openssl to encrypt your password. Ask your security friends before trying
checkout chpasswd
thanks for the hint. This however needs root access