出于某种原因,作为用户,我需要在没有 sudo 的情况下运行需要 root 权限才能工作的脚本 script.sh。
我认为这是将 sudo INSIDE script.sh 放入的唯一解决方案。举个例子吧:
script.sh :
#!/bin/sh
sudo apt-get update
当然,如果我执行这个脚本,我会得到一个提示,要求我输入密码。然后我添加到我的 sudoers 文件中(最后覆盖其他所有内容):
user ALL=(ALL:ALL) NOPASSWD:/path/to/script.sh
顺便说一句,我也试过这条线:
user ALL=(ALL) NOPASSWD:/path/to/script.sh
(我想我没有完全理解其中的区别)
但是如果我不使用 sudo 来执行这个脚本,这并不能解决我的问题:
# ./script.sh
[sudo] password for user:
# sudo ./script.sh
Starts updating...
好吧,所以我对自己说“好的,这意味着如果我有一个像我一样在 sudoers 中引用的文件,那么只有当我用 sudo 调用他时它才会在没有提示的情况下工作,这不是我想要的”。 所以,好的,我创建另一个脚本 script2.sh 如下:
script2.sh
#!/bin/sh
sudo /path/to/script.sh
事实上它是有效的。但我对这个解决方案并不真正满意,特别是因为我必须为每个命令使用 2 个脚本。
然后这篇文章是为了帮助遇到这个问题的人并寻找相同的解决方案(我没有找到关于它的好帖子),也许你们有更好的解决方案。
随时分享您的想法!
编辑 1:
我想强调这样一个事实,即这个“apt-get update”只是我的脚本实际情况的一个示例。我的脚本有很多命令(有一些 cd 到 root-access-only 配置文件),解决方案不能是“好吧,直接用 apt-get 做”。
示例的原则是帮助理解,而不是作为简化一般问题答案的借口。
最佳答案
来 self 的博客:IDMRockstar.com :
问题在于,有时我需要以 root 身份运行命令。这是我在不泄露密码的情况下完成此操作的快速而肮脏的方法:
#! /bin/bash
read -s -p "Enter Password for sudo: " sudoPW
echo $sudoPW | sudo -S yum update
这样会提示用户输入密码(并从终端隐藏),然后根据需要传递给命令,所以我没有以 root 身份运行整个脚本 =)
如果你有更好的方法,我很想听听!无论如何,我都不是 shell 脚本专家。
干杯!
.: 亚当
https://stackoverflow.com/questions/25215604/