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

5

我想运行以下示例bash脚本,其中一个命令需要sudo密码:

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

在运行上述脚本时,它会要求输入密码。
我该如何在命令中传递用户名和密码或者有没有更好的方式可以避免在脚本中传递密码?
3个回答

9

简介

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

更长的答案和可选方案

你有几个选择:

  1. 在运行脚本之前与sudo进行交互身份验证,例如sudo -v。凭证将被暂时缓存,为您提供运行脚本的时间。
  2. 向你的sudoers文件添加一个特定的命令,如/usr/lib/klibc/bin/kinit,并使用NOPASSWD选项。有关语法,请参阅sudoers(5)和visudo(8)。
  3. 如果你使用桌面环境,可以使用适当的钥匙环使用gksudo(1)或kdesu(1)缓存你的凭证。

这些方案中的一种或多种肯定会帮助你到达目的地,只是没有按照你想要的方式实现。


8
如果您可以访问完整系统,您可以更改sudoers文件,以允许某些sudo命令在无需密码的情况下运行。
1. 在命令行上运行visudo。 2. 找到您的用户并更改该行,使其类似于以下内容:
pi ALL=(ALL) NOPASSWD: /path/to/kinit, /path/to/another/command

应该可以了。再试一次吧!

希望能对你有所帮助。


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的文件,这可能不是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接