web-dev-qa-db-ja.com

Bashでのhtdigest-c / path / to / file / $ user $ user $ passwordのスクリプト

変数$ passwordのパスワードを使用してスクリプトを作成できるようにしたい。

htdigest -c /etc/Apache2/pw/$user $user $password

現時点では、手動でパスワードを入力するように求められます。 PHPスクリプトによる自動セットアップになるため、これは不可能です。誰かがこれをスクリプト化する方法を教えてもらえますか?または同等のスクリプト可能な関数ですか?

8
Mr. King

https://stackoverflow.com/questions/645659/how-do-you-htdigest-400-user-accounts を参照してください

上位投票の回答の提案の1つに基づく最も簡単な方法は、おそらく次のとおりです。

digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" | 
           md5sum | awk '{print $1}' )"

printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/Apache2/pw/$user"

md5sumではなくmd5 from GNU coreutilsとawkを使用しました。これは、システムにインストールしたものであり、インストールできなかったためです。どのパッケージに/usr/bin/md5が含まれているかをわざわざ見つけてください。sha512sumまたは他のハッシュプログラムを使用することもできます。

例えばifuser = foorealm = bar、およびpassword = baz次に、上記のコマンドは以下を生成します。

foo:bar:5bf2a4095f681d1c674655a55af66c5a

htdigestは、魔法のようなことや異常なことは何もしません。上記のコマンドのように、ユーザー、レルム、パスワードを正しい形式で出力するだけです。

特定のuser:realmのダイジェストを追加するだけでなく、削除することは、sedを使用して簡単に行うことができます。

sed -i -e "/^$user:$realm:/d" "/etc/Apache2/pw/$user"

また、user:realmのダイジェストの更新/変更は、上記の方法と組み合わせてsedを使用して実行し、ダイジェスト行を生成することもできます。例えば.

digest="$( printf "%s:%s:%s" "$user" "$realm" "$new_password" | 
           md5sum | awk '{print $1}' )"

sed -i -e "/^$user:$realm:/ c$user:$realm:$digest" "/etc/Apache2/pw/$user"
8
cas

PHP http://fr.php.net/manual/en/function.proc-open.php の 'proc_open'関数を確認してください

オプションでhtdigestを実行してから、パイプに新しいパスワードを送信できます。

おそらく、htdigestジョブを実行するPHP関数を見つけて作成できます。proc_open...を使用するよりも簡単なはずです。

0
Dom