5

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

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

在运行上述脚本时,它要求输入密码。
我如何在命令本身中传递用户名和密码,或者有什么更好的方法可以跳过在脚本中传递我的密码?

4

3 回答 3

9

TL;博士

你不能——至少,不是你想的那样。

更长的答案与替代品

你有几个选择:

  1. 在运行脚本之前使用sudo进行交互身份验证,例如sudo -v. 凭据将被临时缓存,让您有时间运行脚本。
  2. 使用 NOPASSWD 选项将特定命令(例如/usr/lib/klibc/bin/kinit )添加到您的 sudoers 文件中。有关语法,请参见 sudoers(5) 和 visudo(8)。
  3. 如果您使用的是桌面环境,请使用带有适当密钥环的 gksudo(1) 或 kdesu(1) 来缓存您的凭据。

其中一项或多项肯定会让你到达你想去的地方——只是不是你想去的地方。

于 2013-08-21T18:17:29.593 回答
8

因此,如果您可以访问整个系统,则可以更改 sudoers 文件以允许某些 sudo 命令在没有密码的情况下运行。

  1. 在命令行运行visudo

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

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

那应该这样做。再试一次!

希望有帮助

于 2013-08-21T18:14:55.617 回答
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 的文件,这可能不是您想要的。

于 2013-08-21T18:14:12.973 回答