我有以下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
答案 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