【问题标题】:Enter password for a sudo command in a chain of commands在命令链中输入 sudo 命令的密码
【发布时间】:2023-03-25 08:45:01
【问题描述】:

在 Linux 中,如何为需要 sudo 的命令链中的一个命令输入密码。我能想到的一个例子是,在运行了长时间的编译作业后,我想关闭机器。

make ; sudo init 0 

我希望关闭命令仅在 make 完成后运行,但想立即输入密码,因为当第一个命令完成时我不会在那里。另外,我不想以超级用户权限运行“make”。所以切换到root并运行命令也是不可能的。

谢谢!

【问题讨论】:

    标签: linux bash shell sudo


    【解决方案1】:
    sudo sh -c "su -c 'make' $USER && init 0"
    

    尽早并经常更改您的 uid。这就是芝加哥的方式!

    【讨论】:

    • 上面的命令是这样做的吗?您以超级用户身份运行 shell,但其中“su”命令以当前用户身份运行“make”,之后以超级用户身份运行“init 0”。
    • @Rohit:是的,这正是它的作用。请注意双引号的使用,以便在更改 uid 之前在外壳的上下文中解释 $USER。此外,超级用户无需提供密码即可运行 su。
    【解决方案2】:

    您可以运行 sudo -v 来更新 sudo 时间戳 - 这意味着您无需在 x 分钟内输入密码(默认为 5)。您可以通过编辑sudoers 文件中的timestamp_timeout 来更改超时。

    您可能还想将命令更改为

    make && sudo init 0
    

    只有在 make 成功完成时才会关闭。

    【讨论】:

      【解决方案3】:

      一种可能性是使用Expect 自动输入密码。

      以下是期望和密码的简单 HOW-TO:http://www.linux.com/archive/feed/56066

      另一种可能性是编辑您的 /etc/sudoers 并将您的用户设置为无需密码即可使用 sudo。如果您检查该文件,它将在那里的 cmets 中进行说明。

      【讨论】:

        【解决方案4】:

        为什么不将密码输入sudo

        make; echo 'password' | sudo -S init 0

        【讨论】:

        • +1,这是我需要做的:System.exec("make; echo 'password' | sudo -S init 6");
        【解决方案5】:

        将 sudo 的超时时间更改为足以覆盖您的使用的时间,然后运行 ​​sudo echo 之类的内容进行身份验证,然后运行您的其他命令。只要没有达到密码超时,它就应该执行而无需再次询问。

        【讨论】:

          【解决方案6】:

          您可以将其添加到您的 sudoers 文件中

          username ALL = NOPASSWD: /sbin/init
          

          其中 username 是您要允许的用户名。

          【讨论】:

          • 有效,但有副作用是用户可以随时执行sudo init 0,无需密码(虽然问题确实希望权限在之后消失)......之后不要让您的终端无人看管这个。
          • 是的,一个不安全的解决方案,但大多数发行版都允许用户通过 GUI 关闭/重新启动。
          猜你喜欢
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-19
          • 2016-03-19
          • 2022-01-08
          • 1970-01-01
          相关资源
          最近更新 更多