使用os.exec执行'su'会返回错误

时间:2018-07-17 14:01:50

标签: bash shell go

据我了解,Go的exec函数直接与内核一起执行命令,而不是在本地创建终端会话或类似内容。不幸的是,我需要使用su命令才能运行脚本,该脚本涉及运行su然后通过stdin传递根密码。

是的,我必须使用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。希望有另一种解决方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

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

github.com/kr/ptyother packages可能对此有所帮助。


我必须回顾其他人在各自评论中写的内容