shell - 将密码传递给 sudo 以获取需要输入的命令
问题描述
我正在尝试创建一个 Shell 脚本并且(为了避免键入,而且暂时忽略与安全相关的问题)希望直接将密码传递给“sudo”命令,例如,
pword="mypassword"
echo $pword | sudo -S whoami
这工作得很好。但是现在当命令本身需要输入时,这种方法似乎失败了,例如,
echo $pword | sudo -S cat<<<"Hello"
这将导致“密码错误”错误。目前,我的解决方案是首先运行示例中的“虚拟命令”,并使用这样一个事实,即对于第二个命令,系统不会再次提示输入密码。但是,有没有人知道更好的解决方案来让它工作?
解决方案
您可以通过执行以下操作来延迟“此处文档”(<<<
构造)的激活:
echo $pw | sudo -S sh -c ' cat <<<"Hello" '
更好的解决方案是在首先定义一个环境变量来引用将发出密码的程序之后,使用sudo -A
而不是,。这样您就不必担心与命令行的其余部分竞争 stdin。您应该创建该 askpass 程序(它可以是一个 shell 脚本),使其只能由您自己读取、写入和执行,这样您的密码就会安全地隐藏在程序中。sudo -S
$SUDO_ASKPASS
推荐阅读
- ios - 在应用内购买中按下购买按钮时如何检测和执行代码
- javascript - 在 HOC 中使用 Antd 菜单时出现“超出最大调用堆栈大小”
- angular - 服务器未能验证请求。确保 Authorization 标头的值正确形成,包括签名。错误?
- express - 如何使用 chai 测试 multipart/form-data
- python - 将数据插入数据库时如何修复```TypeError: can't pickle _thread._local object```?
- uwp - 为什么 UWP TextBlock 是密封的?
- php - 如何制作不同的 layout.php 文件并包含到不同的语言中?
- macros - 手动生成 xlsx 的宏可以正常工作,但不能通过 QlikviewManagement Consol 批量生成
- kotlin - 切换到 Kotlin 1.3.30 仅在 Android API 21 上中断 hashCode
- sql-server - SQL Server Native Client Datetime field overflow during migration