首页 > 解决方案 > 使用 os.exec 执行“su”返回错误

问题描述

据我了解,Go 的 exec 函数直接使用内核执行命令,而不是创建本地终端会话或类似的东西。不幸的是,我需要使用该su命令来运行脚本,该脚本涉及运行su然后通过标准输入管道输入 root 密码。

是的,我必须使用su(禁用设备上的业务用例sudo),而且我还需要能够输入密码。

到目前为止,我的代码如下

rootRun := exec.Command("su", "-c", "whoami")

rootRun.Stderr = os.Stdout
rootRun.Stdout = os.Stdout

err = rootRun.Run()
check(err)

错误是

su: must be run from a terminal
panic: exit status 1

我能想到的唯一方法是用 go 模拟机器上的终端(我不知道可以使用哪些包,如果你知道的话请告诉我)或创建某种本地 ssh 连接给了我一个 pty 会话可以使用,但这不是很好,因为设备有时会禁用 ssh。希望有另一种解决方法,请告诉我。

标签: bashshellgo

解决方案


尝试运行它,使其连接到伪 TTY

github.com/kr/pty其他软件包可能会对此有所帮助。


我必须回顾一下其他人在他们各自的评论中所写的内容,即这种做法被彻底和不可逆转地破坏了。


推荐阅读