2 回答

TA贡献1831条经验 获得超4个赞
kadmin
如果有密码,程序直接从控制终端读取密码,而不是从标准输入读取。这意味着设置cmd.Stdin
很可能没有效果。幸运的是,有一个-pw
选项:(是); 不幸的是,使用此选项并不安全。change_password -pw password principal
cpw
change_password
那么,除了使用 之外-pw
,您还有两个选择:
提供一个伪终端的控制终端,以便您提供密码;或者
确保没有控制终端,以便
kadmin
使用标准输入。
如果你做后者,正确的发送方式cmd.Stdin
是密码重复两次,每次最后都有一个换行符。也就是说,而不是:
cmd.Stdin = strings.NewReader(password) cmd.Stdin = strings.NewReader(password)
(它只是创建然后丢弃一个阅读器实例)你会想要:
cmd.Stdin = strings.NewReader(password + "\n" + password + "\n")
或类似的。

TA贡献1883条经验 获得超3个赞
这对我有用。发布我的解决方案以防有人绊倒。
// Updating Password
func changePassword(password string, principal string) {
b.Write([]byte(password + "" + password))
var b bytes.Buffer
b.Write([]byte(password + "\n" + password + "\n"))
cmd.Stdin = &b
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
check(err)
}
- 2 回答
- 0 关注
- 147 浏览
添加回答
举报