2009-11-09 02:37:00 +0000 2009-11-09 02:37:00 +0000
123
123
Advertisement

sudo带密码的命令行?

Advertisement

忙碌的日子里,我想在晚上运行

$ ./configure && make && sudo make install && halt

&001

晚上睡觉的时候,希望应用能自动安装。但是第二天我看到的是sudo问我密码的画面。那么,我怎么才能在一个命令行中运行sudo带密码,或者有其他的方法吗?

Advertisement
Advertisement

答案 (11)

185
185
185
2009-11-09 02:47:20 +0000

是的,使用-S开关从STDIN读取密码:

$echo <password> | sudo -S <command>

,所以你的情况是这样的:

$./configure && make && echo <password> | sudo -S make install && halt

,当然,用你的密码代替<password>

11
11
11
2009-11-09 03:03:22 +0000

你也可以用visudo配置sudo,让你的用户在没有密码的情况下使用make作为sudo。

10
Advertisement
10
10
2012-08-08 06:52:50 +0000
Advertisement

其他几个方案的缺点是,它们的缺点是不必要地以root身份运行./configuremake

这有点迂回曲折,但应该是可行的:

sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"

注意,使用双引号是为了让$USER被(非root)shell展开。我有时会做这样的事情,期望命令能运行很长时间,但出了问题,它立即终止;sleep 60可以让我在系统关闭前杀死命令。或者你可以用halt加上时间参数。

10
10
10
2009-11-09 03:14:31 +0000

你可以将命令行替换为:

$sudo su $./configure && make && make install && halt

&007

你会立即提示你的密码,然后其余的命令将以超级用户的身份运行。

9
Advertisement
9
9
2014-11-25 19:43:17 +0000
Advertisement

将HISTIGNORE设置为"sudo -S

$ export HISTIGNORE='*sudo -S*'

然后将你的密码安全地传给sudo:

$ echo "your_password" | sudo -S -k <command>

"HISTIGNORE "的意思是不把这个命令保存到历史记录中。比如说,下面这条命令可以安全地将你的密码传输到sudo命令中,而不保留密码的历史记录。

”-S",是指使用stdin来获取密码,

“-k "是指忽略缓存的凭证,强制sudo总是询问。以上方法的缺点是,如果你想在历史记录中看到你运行的命令,那么它们就不会出现。另一种方法是更新sudo验证凭证缓存(默认是启用5分钟超时),然后单独运行sudo。但这样做的坏处是,你需要注意5分钟的缓存。

例如:

$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh

注意,我在每条命令之前都运行了sudo,以确保sudo缓存更新,因为默认是5分钟。是的,whoami应该不需要5分钟,但我觉得在每条命令之前运行也可以,这样可以保持一致。你也可以在你的 ~/.bashrc 文件中输入 "export HISTIGNORE=‘sudo -S’",然后用”. ~//.bashrc “或者登录后再登录。不过,我想用这个来编写脚本,所以我会把它放在我所有脚本的最上面,以确保安全。将 "echo ”“ | sudo -S -v "设置为变量也是个好主意,然后在每条需要root权限的命令之前运行这个变量就可以了,见Janar的评论。"John T "的评论中也应该包括”-k “参数,因为如果你运行 "sudo -S "而没有”-k",而sudo验证缓存中已经有你的凭证(并且仍然有效,默认的sudo验证缓存是5分钟),那么bash会把你的密码作为命令运行,这是不对的。

5
5
5
2015-06-09 14:15:37 +0000

你也可以这样做:

sudo -S <<< "password" command
4
Advertisement
4
4
2014-12-08 15:18:13 +0000
Advertisement

注意,我发现这个方法在老版本的sudo上不起作用,特别是 “Sudo 1.6.7p5版本":

$ echo "<your_password>" | sudo -S -k whoami

,而这个方法在新老版本的sudo上确实起作用,因为这个方法在新老版本的sudo:

$ echo "<your_password>" | sudo -S -v
$ sudo whoami
2
2
2
2011-04-19 23:56:23 +0000

如果你想更加小心,可以做一个脚本,改变文件的权限,让只有root才能读取和编辑,然后直接运行。

示例: 1) 创建一个文件:

gedit ~/.easy.install

2) 粘贴并保存: ./configure && make && echo <password> | sudo -S make install && halt

3) 使其可执行: sudo chmod +x ~/.easy.install

4) 改变文件的权限,只有root才能读取和编辑: sudo chmod 700 ~/.easy.install

5) 运行:

~/.easy.install

享受一下;-)

1
Advertisement
1
1
2010-11-10 03:37:15 +0000
Advertisement

这样设置sudo是很危险的,如果有人偶然看到sudo不需要你的账户上的密码,那是很危险的。除非你知道自己在做什么,否则不要这样做。我在当地的A+培训项目中,用我的实验电脑就发生过很多次这样的事情。-\John T.说的听起来很好,除了在shell历史记录中找到密码的风险之外。CarlF说的听起来比较好,但是如果有一条命令失败,电脑仍然会以超级用户权限运行。

0
0
0
2018-11-08 16:51:03 +0000

这个问题就解决了。例如,以用户根目录为例:

echo -e 'password\npassword\n' | sudo passwd root
0
0
0
2014-06-29 20:57:36 +0000

我个人的做法和John T 在09年11月9日 2:47回答的一样,我也是根据他的回答改进了我的,谢谢。我主要是用这些来维护别人的个人电脑。

Advertisement

相关问题

6
10
11
37
13
Advertisement