如何在脚本中运行’sudo’命令?
要手动执行修补,我必须输入此命令
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
09之前有一个空间:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
如何在脚本中运行它?
还有其他一些命令但是这个命令很麻烦。
在脚本中使用sudo
很少是个好主意。 相反,从脚本中删除sudo
并使用sudo
运行脚本本身:
sudo myscript.sh
这样,脚本中的所有命令都将以root权限运行,您只需在启动脚本时提供一次密码。 如果您需要在没有sudo
权限的情况下运行脚本中的特定命令,则可以将其作为常规用户运行(感谢Lie Ryan ):
sudo -u username command
空间是无关紧要的,它不应该影响任何东西,命令和它的参数之间总是有一个空格。
您可以修改sudoers
文件。
运行sudo visudo
。
为您的用户名和要运行的脚本添加条目,而不要求输入密码。
username ALL=(ALL) NOPASSWD: /path/to/script
你可以尝试类似的东西:
echo "PASSWORD" | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
这是不安全的事情,因为你用纯文本写了一个sudoer密码。 为了使它更安全,您可以创建一个变量并将sudo密码读入变量,然后您可以执行以下命令:
echo $PASSWORD | sudo -S ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
此外,如果您不介意所有命令都以root身份执行,您可以使用sudo
简单地执行脚本,如前所述。
sudo ./myscript
这个答案类似于terdon的答案 。 我还建议使用sudo
运行主脚本,这样您就可以运行命令而无需向用户询问任何密码。
但是,如果您想要以root用户或特定系统用户身份运行某些命令,而不是以sudo
运行命令的实际用户,则可以检查$SUDO_USER
变量以找出原始用户。
这是一个如何实现这一目标的示例脚本:
#!/bin/bash # ref: https://askubuntu.com/a/30157/8698 if ! [ $(id -u) = 0 ]; then echo "The script need to be run as root." >&2 exit 1 fi if [ $SUDO_USER ]; then real_user=$SUDO_USER else real_user=$(whoami) fi # Commands that you don't want run with root would be invoked # with: sudo -u $real_user # So they will be ran as the user who invoked the sudo command # Keep in mind, if the user is using a root shell (they're logged in as root), # then $real_user is actually root # sudo -u $real_user non-root-command # Commands that need to be ran with root would be invoked without sudo # root-command
#!/bin/bash # this declares that current user is a sudoer sudo tee /etc/sudoers.d/$USER <
实际上有一种更简单的方法可以做到这一点。 为了便于携带,这是我的实现,但随时可以根据您的需要进行操作。
在启动脚本时输入您的sudo密码作为参数,捕获它,并使用每个命令回显它,这将提示输入sudo密码。
#!/bin/bash PW=$1 echo $PW | ./playback_delete_data_patch.sh 09_delete_old_data_p.sql ./command_wo_sudo.sh echo $PW | ./other_command_requires_sudo.sh
您可以在脚本启动后添加提示和捕获,如下所示:
echo "enter the sudo password, please" read PW
但是,如果其他人监视节点上运行的内容; 可以访问由它创建的日志; 或者只是在运行测试时随机查看,这可能会危及安全性。
这也适用于运行需要yes继续的命令/脚本:
echo $PW | yes | ./install.sh
回显是对提示的响应,因此,如果您按顺序运行其他提示进度的脚本,则可以使用您需要的任何内容。 但要确保你知道订单,否则会发生不好的事情。
您可以尝试将运行该脚本的用户添加到sudoers文件中:
#give permissions to the file sudo chmod 700 /etc/sudoers.d/useradm sudo visudo /etc/sudoers.d/useradm #add the following text, changing "user" but your desired user user ALL=(ALL)NOPASSWD:ALL #return the right permissions to the file sudo chmod 440 /etc/sudoers.d/useradm