如何在Bash脚本中运行sudo命令?

时间:2013-08-21 18:08:22

标签: bash shell

我想运行以下示例bash脚本,该脚本需要命令的sudo密码

#!/bin/bash
kinit #needs sudo password
vi hello.txt  

在运行上面的脚本时,它要求输入密码 如何在命令本身中传递用户名和密码,还是有更好的方法可以跳过在脚本中传递密码?

3 个答案:

答案 0 :(得分:8)

因此,如果您可以访问完整系统,则可以更改sudoers文件,以允许使用密码运行某些sudo命令。

  1. 在命令行中运行 visudo

  2. 找到您的用户并将该行更改为如下所示:

  3.   

    pi ALL =(ALL)NOPASSWD:/ path / to / kinit,/ path / to / another / command

    应该这样做。再试一次!

    希望有所帮助

答案 1 :(得分:8)

TL; DR

你不能 - 至少,不是你的想法。

替代品的更长答案

您有几个选择:

  1. 在运行脚本之前,使用 sudo 进行交互式身份验证,例如sudo -v。凭证将暂时缓存,让您有时间运行脚本。
  2. 使用NOPASSWD选项将特定命令(例如 / usr / lib / klibc / bin / kinit )添加到您的sudoers文件中。有关语法,请参阅sudoers(5)和visudo(8)。
  3. 如果您使用的是桌面环境,请使用gksudo(1)或kdesu(1)与相应的密钥环缓存您的凭据。
  4. 这些中的一个或多个肯定会让你到达你想去的地方 - 而不是你想去那里的方式。

答案 2 :(得分:4)

您不应传递用户名和密码。这是不安全的,如果密码被更改,它将不起作用。

您可以使用:

gksudo kinit # This is going to open a dialog asking for the password.
#sudo kinit # or this if you want to type your password in the terminal
vi hello.txt

或者您可以在root下运行脚本。但请注意,vi也将以root身份运行,这意味着它可能会创建属于root的文件,这可能不是您想要的。