Set HISTIGNORE to "sudo -S"
$ export HISTIGNORE='*sudo -S*'
Then pass your password safely to sudo:
$ echo "your_password" | sudo -S -k <command>
"HISTIGNORE" means to not save this command into the history. That is the history in memory or "~/.bash_history" file.
For example, the below will safely pipe your password to the sudo command, without
retaining a history of your password.
“-S”, means to use stdin for the password,
“-k” means to ignore cached credentials to force sudo
to always ask. This is for consistent behavior.
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh
The downside to the above method is that if you want to see the commands you ran in the history later on they won't be there. Another method is to update the sudo authentication credential cache (default is enabled with 5 minutes timeout), then run the sudo separately. But the downside of this is that you'll need to be aware of the 5 minute cache.
For example:
$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh
Note I ran a sudo before each command to ensure that the sudo cache is updated, as the default is 5 mintues. Yes, whoami shouldn't take 5 minutes, but I figure might as well have it run before each command for consistency. You could also put "export HISTIGNORE='sudo -S'" in your ~/.bashrc file, then load it with ". ~/.bashrc" or logoff then login. However, I'm thinking using this for scripting purposes, so I'll keep it at the top of all my scripts for best security practices. Setting "echo "" | sudo -S -v" to a variable instead might also be a good idea, then just run the variable before each command that needs root privileges, see Janar's comment. "John T"'s comment should also include the "-k" parameter, as if you run "sudo -S" without "-k" and sudo authentication cache already has your credentials (and is still valid, default sudo authentication cache is 5 minutes) then bash will run your password as a command instead, which is bad.
halt
to run as root.sudo
have a 15-minute timeout? Couldn't you run, say,sudo ls
or something similar, enter your password, and then run the above command, havingsudo
privileges still active? (I can't test this at the moment, otherwise I'd post this as an answer.)sudo
is configurable. Security-conscious people (aka paranoid, like me) set it to zero... :-)sudo -v
; is the easity way to get sudo to prompt with as a noop. @Matt