slappasswd オートメーション

slappasswd オートメーション

slappasswdを自動化したいのですが、これはうまくいきません。

[root@controller ~]# echo -e "vagrant\nvagrant\n" | slappasswd
New password:

passwdを自動化できますが:

[root@controller ~]# echo -e "vagrant\nvagrant\n" | passwd vagrant
Changing password for user vagrant.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.

質問

  1. このメソッドがslappasswdを自動的に実行しないのはなぜですか?
  2. slappasswdを自動化する方法は?

答え1

これによるとマンページパスワードをパラメータとして提供できます。

slappasswd -s vagrant

それ以外の場合、slappasswdはstdinの代わりにttyから読み取って新しいパスワードを取得します。この場合、expecttalk to itのようなものを使用できます。

答え2

(代替私の答え)。 stdinを読むよりも/dev/ttyでユーザー対話を必要とするプログラムは、次のものを使用できます。予想されるtcl 言語を使用するコマンド。たとえば、/usr/bin/expect に Expect があるとすると、setuserpw次の内容でファイルを作成します。

#!/usr/bin/expect -f
expect_user -re "(\[^ \]+) (\[^ \]+)\n"
set user $expect_out(1,string)
set pw   $expect_out(2,string)
spawn passwd $user
expect "password:"
send "$pw\r"
expect "password:"
send "$pw\r"
expect eof

実行可能にすることを忘れないでください

chmod +x ./setuserpw

このスクリプトは、1行の2つの単語の標準入力を読み取り、変数を設定しますuser 。その後、pwpseudo-ttyを介して接続してユーザー用のプログラムを実行(作成)します(参考資料を参照)。 "password:" と一致するプロンプトを探す出力を読み込みます。その後、プログラムにパスワードを送信し、同じ操作をやり直します(プログラムがパスワードを2回入力するように要求したとします)。たとえば、passwdman pty

./setuserpw <<!
user1 passwd1
!

あなたの場合は、passwdに置き換えて、受信しslappasswdたプロンプトがこの例のプロンプトと一致することを確認してください。

関連情報