我想使用 kpasswd 来更改我的密码。由于我必须为多个领域执行此操作,因此我想自动传递密码。我想在 bash 中设置一个变量并将其传递给 kpasswd,以某种方式。:) 变量设置没有问题,但是将其传递给 kpasswd,这是一个问题。
我该怎么做?
从man kpasswd
似乎没有我可以传递的标志,所以我在考虑使用 printf 或其他一些解决方案。不幸的是,这不起作用:
printf "$PWD\n$PWD\n" | kpasswd $KERBEROS_USERNAME@DOMAIN
Run Code Online (Sandbox Code Playgroud)
其他一些细节:
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
$ kpasswd --version
kpasswd (Heimdal 1.5.1apple1)
Run Code Online (Sandbox Code Playgroud)
这在传统上是通过expect
脚本完成的。例如
#!/usr/bin/expect --
set user [lindex $argv 0]
set oldpassword [lindex $argv 1]
set password [lindex $argv 2]
spawn kpasswd $user
expect "password"
send "$oldpassword\r"
expect "password"
send "$password\r"
expect "password"
send "$password\r"
expect eof
Run Code Online (Sandbox Code Playgroud)
将此脚本放在一个文件中,例如mysetpw
, do chmod +x mysetpw
,然后使用./mysetpw principalname oldpassword newpassword
. 我没有kpasswd
,但网络上的示例似乎表明它也需要旧密码,就像在这个 scipt 中一样。您可能需要更改"password"
脚本寻找的提示(例如)以了解何时应该发送下一行。