![在一个别名命令中提供 sudo 和 openconnect 的密码](https://linux22.com/image/1612537/%E5%9C%A8%E4%B8%80%E4%B8%AA%E5%88%AB%E5%90%8D%E5%91%BD%E4%BB%A4%E4%B8%AD%E6%8F%90%E4%BE%9B%20sudo%20%E5%92%8C%20openconnect%20%E7%9A%84%E5%AF%86%E7%A0%81.png)
我想为 openconnect 创建一个别名,该别名是
echo "password" | sudo openconnect server --user=username --passwd-on-stdin --no-cert-check
一切正常,但我的问题是每次我都需要输入密码,因为我正在使用sudo
。我该怎么做才能sudo
在此别名中提供密码?
我见过 这个问题 但没有帮助。
答案1
您可以使用:
echo "<sudo password>" | sudo -S sh -c "echo \"<openconnect password\" | openconnect server --user=username --passwd-on-stdin --no-cert-check"
将其替换为 root 所需的密码和您的 openconnect 密码。
这应该可行,因为您首先将 sudo 密码通过管道传输到 sudo 本身(按照您链接的问题使用 -S,通过 stdin 输入密码),然后(以 root 身份)执行另一个命令 - 这就是所做的sh -c
(后面跟着一个字符串,即您的命令)。我们将我们的命令附加到sh -c
其中包括将 openconnect 密码通过管道传输到 openconnect 的命令 - 此时,openconnect 以 root 身份运行,因此不需要在它之前使用 sudo。
虽然我没有使用 openconnect,但我测试了 来echo "mypassword" | sudo -S sh -c "whoami | xargs -i echo {}
测试管道中的值,whoami
它告诉我root
,确认 sudo 有效。您可能会在 stdout(您的终端)中看到一行,说明输入密码,但它仍然有效 - 如果您在 stdin 中指定了它,则可以忽略此行。