隐藏在bash脚本中显示的明文密码?

时间:2017-07-13 05:06:45

标签: linux bash

我有以下bash脚本在Debian中重新启动网络管理器。脚本按预期工作,但不是我想要的。当脚本要求sudo密码时,我可以使用echo传递它,但是在脚本执行时它会在终端显示密码,这使得它不像我想的那样令人愉悦。无论如何让脚本输入密码,但在脚本调用sudo密码时不显示密码文本?

我在提交此问题之前尝试了很多关于 Stack Overflow 的建议,以及 Stack Exchange

脚本如下:

#!/bin/bash 
clear
echo "Restarting service Network Manager"
echo""
sleep 1
echo -e "\033[0;31m......................................\033[0m"
echo -e "\033[0;31m......................................\033[0m"
sleep 1
echo""  
sudo service network-manager restart
sleep 2
echo <Password> 
sleep 2
echo "Service Network Manager Restarted"
sleep 1
echo "" 
echo "Relinquishing control of terminal to user..."
sleep 7
clear

3 个答案:

答案 0 :(得分:3)

删除echo <Password>行?我很确定除了显示密码之外什么都不做,因为sudo显然(通过/etc/sudoers中的适当条目)可以正常运行,而无需提供密码。 (您使用echo写入终端的内容会传递给任何其他进程。)

一般来说,您可以使用sudo -S使sudo期望stdin上的密码。但一般来说,如果你必须在脚本中硬编码密码,你就会以某种方式做错。

答案 1 :(得分:2)

  

无论如何都要让脚本输入密码

在脚本中输入密码并不是一个好主意。首先,从安全的角度来看,可以从具有脚本访问权限的任何人的脚本中恢复密码。其次,从维护视图来看,一旦您更改密码,脚本就会突然停止工作,您必须全部更新。

幸运的是,由于您已经在使用sudo,因此有更好的解决方案。您可以使用sudo中的NOPASSWD规则配置/etc/sudoers以允许在没有密码的情况下运行某些命令。

myuser ALL=(ALL) NOPASSWD: service network-manager restart

请参阅:

警告:始终使用/etc/sudoers修改visudo,绝不直接。它可以防止你破坏/etc/sudoers。在您/etc/sudoers中断后,您将无法使用sudo,包括使用sudo修复/etc/sudoers

答案 2 :(得分:0)

试试这个/ bin / echo -e“密码\ n”| sudo apt-get update

或看到此Use sudo with password as parameter