linux - 在脚本内使用没有密码的 sudo

出于某种原因,作为用户,我需要在没有 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/

相关文章:

c - gcc 调试符号(-g 标志)与链接器的 -rdynamic 选项

linux - 我在哪里可以找到 Unix 实用程序的源代码?

linux - 如何获取 linux 实用程序 tail 的源代码?

linux - 内核熵池是如何工作的?

c - 交叉编译时如何使用外部库?

linux - 有什么方法可以在linux中保留但不提交内存?

linux - 当存在同名的共享库时,如何强制链接静态库

c - 32 位应用程序如何在 64 位 Linux 上进行系统调用?

linux - 在响应中返回某个字符后,如何关闭 netcat 连接?

c - 如何创建新的 Linux 内核调度程序