通过命令行使用 kpasswd 更改密码?

San*_*der 2 bash bsd

我想使用 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)

meu*_*euh 5

这在传统上是通过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"脚本寻找的提示(例如)以了解何时应该发送下一行。