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

Shi*_*wal 5 bash shell

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

#!/bin/bash
kinit #needs sudo password
vi hello.txt  
Run Code Online (Sandbox Code Playgroud)

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

Mal*_*nes 8

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

  1. 在命令行上运行visudo

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

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

应该这样做.再试一次!

希望有所帮助


Tod*_*obs 8

TL; DR

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

更长的答案与替代品

你有几个选择:

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

其中一个或多个肯定会让你到达你想去的地方 - 而不是你想要去的地方.


Ale*_*-A. 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
Run Code Online (Sandbox Code Playgroud)

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