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 關注
- 139 瀏覽
添加回答
舉報