我尝试在脚本中使用vi命令,此外我尝试在同一个脚本中传递sudo密码。所以我有类似的东西:
echo mypassword | bash -c "echo $'Goappendthis\E:x\n' | sudo vi /etc/test"
vi命令成功但仍然不断询问密码。我怎么能用密码做这个,所以我可以在脚本中为多个主机运行相同的命令?
答案 0 :(得分:0)
第一:不要这样做。使用不需要传递密码的权限提升机制。
第二:除非给定-S
或--stdin
,否则sudo
直接从TTY读取密码,而不是从stdin读取密码。
第三:你需要将密码指向sudo
的stdin 而不用覆盖vi
的标准输入。这样做可能如下所示:
echo mypassword | sudo --stdin -- bash -c "echo $'Goappendthis\E:x\n' | vi /etc/test"
答案 1 :(得分:0)
在许多情况下,您不想通过管道传输密码,而是要保持 sudo 凭据刷新:
refreshPermissions () {
local pid="${1}"
while kill -0 "${pid}" 2> /dev/null; do
sudo -v
sleep 10
done
}
refreshPermissions "$$" &
然后,如果命令需要在您的程序中获得 root 权限,请执行以下操作:
sudo [command]
并且不会要求密码。