在脚本内使用不带密码的 sudo

2024-05-20

由于某种原因,我需要作为用户在没有 sudo 的情况下运行脚本 script.sh ,该脚本需要 root 权限才能工作。
我认为将 sudo 放入 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 个脚本。

这篇文章的目的是帮助遇到这个问题的人并寻找相同的解决方案(我没有找到关于它的好文章),也许你们有更好的解决方案。

欢迎分享您的想法!


EDIT 1 :

我想坚持这样一个事实:这个“apt-get update”只是一个示例,与我的脚本实际情况相去甚远。我的脚本有很多命令(其中一些 cd 到仅 root 访问的配置文件),解决方案不能是“好吧,直接使用 apt-get 执行”。

举例的原则是帮助理解,而不是成为简化一般问题答案的借口。


来自我的博客:IDMRockstar.com http://www.idmrockstar.com:

更重要的是,有时我需要以 root 身份运行命令。这是我在不泄露密码的情况下完成此任务的快速而肮脏的方法:

#! /bin/bash
read -s -p "Enter Password for sudo: " sudoPW
echo $sudoPW | sudo -S yum update

这样,系统会提示用户输入密码(并从终端隐藏),然后根据需要传递到命令,因此我不会以 root 身份运行整个脚本=)

如果您有更好的方法,我很想听听!无论如何,我都不是 shell 脚本专家。

Cheers!

.: Adam

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在脚本内使用不带密码的 sudo 的相关文章

随机推荐

  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • 如何在 Dart 中以正确的方式重定向和重新加载?

    在 Dart 中进行重定向和重新加载的首选方法是什么 我们是否只使用 window location href window location href 有几种不同的方法可以处理 URI 更改 每种方法都有自己的用途 当您想要将用户发送到另
  • 我可以在 Airflow 中的一个 DAG 下执行不同开始日期的任务吗?

    我有一个运行两个任务的 DAG A and B 而不是指定start date在 DAG 级别上 我已将其作为属性添加到运算符 我正在使用PythonOperator在本例中 并将其从 DAG 字典中删除 这两个任务每天都会运行 The s
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • Flutter基于Shared Preference设置启动页面

    我一直在尝试根据我的共享首选项设置加载不同的页面 但没有成功 根据 stackoverflow 中找到的几篇文章 我最终得到了以下解决方案 import dart async import package flutter material
  • Zend 2:如何覆盖模块的配置文件?

    如何覆盖 vendor module name config module config php 下找到的配置文件 不 这个link http akrabat com zend framework 2 overriding module c
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • \add_34/U1_1_6 的 Verilog 命名约定

    有人可以解释一下这个命名约定在下面的 Verilog 行中意味着什么吗 我不知道这是什么 add 34 部分的意思是 ADDHXL add 34 U1 1 6 A n1022 B add 34 carry 6 CO add 34 carry
  • 折叠具有多个字段的行

    我有这个代码 awk seen 1 2 a 1 a 1 a 1 t 2 END for i in a print i a i inputfile 我想折叠具有两个以上字段的行 但始终基于第一个字段作为索引 输入文件 三列制表符分隔 prot
  • 逃离的正确方法是什么?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBCPreparedStatement 中的字符?

    以下查询在 Oracle 12c 中是正确的 SELECT FROM dual MATCH RECOGNIZE MEASURES a dummy AS dummy PATTERN a DEFINE a AS 1 1 但它不能通过 JDBC
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • 按下表格视图单元格时更改视图?

    我需要帮助 当我的 tableView 的单元格被选择时 我希望该单元格转到它自己的页面 我不希望每个单元格都转到同一页面 我尝试使用 FirstFolderViewController first FirstFolderViewContr
  • IE 中的 jQuery .width(val) 错误 - 无效参数

    通过ajax加载内部div book table 后 我想调整正文的宽度以适应更大的内容 var new width parseInt book table css width 407 body width new width 在 FF 和
  • 如何在 Perl 中使用原始套接字?

    你怎样才能得到一个rawPerl 中的套接字 那么构建与其一起使用的数据包的最佳方法是什么 与在 C 中执行的操作相同 通过在创建套接字时设置套接字类型 在示例中CPAN http search cpan org rgarcia perl
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su