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.
質問
- このメソッドがslappasswdを自動的に実行しないのはなぜですか?
- slappasswdを自動化する方法は?
答え1
これによるとマンページパスワードをパラメータとして提供できます。
slappasswd -s vagrant
それ以外の場合、slappasswdはstdinの代わりにttyから読み取って新しいパスワードを取得します。この場合、expect
talk 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
。その後、pw
pseudo-ttyを介して接続してユーザー用のプログラムを実行(作成)します(参考資料を参照)。 "password:" と一致するプロンプトを探す出力を読み込みます。その後、プログラムにパスワードを送信し、同じ操作をやり直します(プログラムがパスワードを2回入力するように要求したとします)。たとえば、passwd
man pty
./setuserpw <<!
user1 passwd1
!
あなたの場合は、passwd
に置き換えて、受信しslappasswd
たプロンプトがこの例のプロンプトと一致することを確認してください。