如何在终端中通过-S(stdin)传递密码?报错问题求解
解决通过stdin传递sudo密码时出现命令未找到的问题
你遇到的问题根源是:sudo -S 读取完echo输出的密码完成认证后,会把这行密码继续传递给后面su启动的bash进程,bash把它当成命令执行,所以才会报错“myPassword: command not found”。
给你两种可行的解决办法:
方法一:直接用sudo切换用户(推荐)
不需要嵌套su,sudo本身支持直接指定用户执行shell,命令如下:echo 'myPassword' | sudo -S -u userName /bin/bash这样sudo会直接以
userName的身份启动bash,不会出现多余输入被当成命令执行的问题。方法二:重定向su的输入到/dev/null
如果一定要保留su的写法,就把su的标准输入重定向到空设备,避免它读取到密码内容:echo 'myPassword' | sudo -S su - userName -s /bin/bash < /dev/null
另外提醒一句:明文在命令行输入密码存在安全风险,建议尽量避免这种方式,比如配置sudo免密(修改/etc/sudoers文件,添加yourUser ALL=(userName) NOPASSWD: /bin/su - userName -s /bin/bash这类规则,注意用visudo编辑)。
内容的提问来源于stack exchange,提问作者KbiR
相关产品推荐
相关产品推荐

