CentOS7インストールでルートパスワードを変更するためのスクリプト/一連のコマンドを作成する必要があるプロジェクトがあります。
スクリプトを実行するユーザーはすでにrootであると想定できます。
現在、私は以下を使用しており、成功メッセージを受け取っています。
[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root)
Changing password for user root.
passwd: all authentication tokens updated successfully.
ただし、これによって実際にパスワードが変更されることはありません。さらに詳しく調べると(手動でパスワードを設定)、パスワードpassword
が辞書チェックに失敗しましたが、最後に成功を報告しています。
[root@localhost]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary Word
Retype new password:
passwd: all authentication tokens updated successfully.
考えられる解決策の1つは、/etc/shadow
で提供される方法とソルトに基づいて、指定されたパスワードをハッシュすることですが、過度に複雑な解決策は避けたいと思います。 /etc/shadow
の値が実際に変更されたかどうかを確認することもできますが、パスワードが既存のパスワードに設定されている場合は無視されます。これをサポートしたいと思います。
パスワードを実際に設定する前に、またはできればpasswd
から完全な出力を取得する前に、パスワードを検証しようとする提案がありますか?
passwd --stdin
を使用する場合、パスワードを送信する必要があるのは1回だけです。だから正しいバージョンは
echo password | passwd --stdin
コードサンプルが正確である場合、(a)簡単な引用符が必要なときにスマート引用符があり、(b)パスワードが「password\npassword」のようなものに設定されている可能性があります(おそらくどちらかの側にスマート引用符があります)。
passwd
コマンドで物事を機能させることは、伝統的にインタラクティブで自動化するのが面倒なので、印象的です。 (比較的苦痛のないgnu世代に賛成です。)しかし、自動化を行っている場合は、 chpasswd
のように、より自動化に適したコマンドを使用してみませんか?
echo root:password | chpasswd
あなたが上でしていることをします。また、一度に50を実行する場合は、username:password
の行をさらに送信するだけです。