将HISTIGNORE设置为“ sudo -S ”
$ export HISTIGNORE='*sudo -S*'
然后将您的密码安全地传递给sudo:
$ echo "your_password" | sudo -S -k <command>
“ HISTIGNORE”表示不将此命令保存到历史记录中。那是内存或“〜/ .bash_history”文件中的历史记录。
例如,以下内容将安全地将您的密码传递给sudo命令,而不会保留密码的历史记录。
“ -S”,表示使用stdin作为密码,
“ -k”表示忽略缓存的凭据以强制sudo始终询问。这是为了保持一致的行为。
$ 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
上面方法的缺点是,如果您想查看以后在历史记录中运行的命令,它们将不再存在。另一种方法是更新sudo身份验证凭据缓存(默认情况下启用5分钟超时),然后分别运行sudo。但是,这样做的缺点是您需要注意5分钟的缓存。
例如:
$ 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
注意我在每个命令之前运行了一个sudo,以确保更新了sudo缓存,因为默认值为5分钟。是的,whoami不需要花5分钟的时间,但是我认为最好还是在每个命令之前运行它,以确保一致性。您还可以将“ export HISTIGNORE =” sudo -S〜/ .bashrc文件中的“”,然后将其加载为“。〜/ .bashrc“或注销然后登录。但是,我正在考虑将其用于脚本目的,因此,为了获得最佳安全性实践,我将其保留在所有脚本的顶部。将sudo -S -v“改为变量也可能是一个好主意,然后只需在需要root特权的每个命令之前运行该变量,请参阅Janar的注释。” John T“的注释中还应包含” -k“参数,就像您在不带“ -k”的情况下运行“ sudo -S”并且sudo身份验证缓存已经具有您的凭据(并且仍然有效,默认sudo身份验证缓存为5分钟)一样,bash会以命令的方式运行您的密码,即坏。
halt
以root身份运行。