【发布时间】:2017-11-12 07:05:28
【问题描述】:
我正在尝试通过我的 Go 程序中的 SSH package 运行脚本(到目前为止我已经成功)。
我的问题是,如果用户具有 sudo 权限,脚本会尝试使用 sudo 运行命令,这会导致 bash 脚本暂停,直到用户输入密码。
例如:
[ERROR ] Install cs-server: Checking dependencies: missing: lib32gcc1
# It attempts to install the missing dependencies with sudo but pauses here
[sudo] password for guest:
在我的 Go 程序中,我写了一些类似这样的东西:
// Connect to SSH and retreive session...
out, err := session.StdoutPipe()
if err != nil {
log.Fatal(err)
}
go func(out io.Reader) {
r := bufio.NewScanner(out)
for r.Scan() {
fmt.Println(r.Text())
}
}(out)
// Execute ssh command...
我收到与上面示例完全相同的输出,只是在这种情况下,我什至看不到 [sudo] password for guest: 行...它只打印到 [ERROR ] Install cs-server: Checking dependencies: missing: lib32gcc1 并永远暂停。
我怎样才能绕过这个暂停?我的选择是从我的 Go 程序中自动输入密码,或者结束 ssh 执行并接收输出。
【问题讨论】:
-
使用
expect:linux.die.net/man/1/expect -
如果我的解决方案可以在不依赖 ssh 远程机器的情况下得到解决,那就太好了。
-
如果可能,您可以让
sudo不需要密码,至少对于该命令。您可以查看this question on a sister site 以了解如何在脚本中包含密码并让sudo使用它——当然这会将您的密码以纯文本形式放入您的代码中