从管道读取sudo密码

时间:2017-03-06 22:32:38

标签: bash shell ssh vi

我尝试在脚本中使用vi命令,此外我尝试在同一个脚本中传递sudo密码。所以我有类似的东西:

echo mypassword | bash -c "echo $'Goappendthis\E:x\n' | sudo vi /etc/test"

vi命令成功但仍然不断询问密码。我怎么能用密码做这个,所以我可以在脚本中为多个主机运行相同的命令?

2 个答案:

答案 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]

并且不会要求密码。