据我了解,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。希望有另一种解决方法,请告诉我。
答案 0 :(得分:2)