
Webサービスに認証するためにパスワードが必要なスクリプトがあります。事前定義されたユーザーの単一のパスワードで十分であり、可能であればパスワードを安全に保存する必要があります(通常のテキストではありません)。
当然、セキュリティ上の理由から、スクリプトにパスワードをプレーンテキストで書きたくないので、スクリプトでパスワードを尋ねるのに毎回入力するのが面倒です。
それでは、スクリプトを実行するたびにパスワードを入力する必要がないようにするにはどうすればよいですか(例:)sudo
。
この場合、スクリプトはPythonになっていますが、PHPやRubyなどの他の言語で再利用できるように、Bashで汎用ソリューションとして実装する方が良いと思いました。
擬似コード:
#!/bin/bash
pw = cache.load() or {
pw = ask_user()
cache.save(pw, 15min)
}
myscript.py pw
答え1
自分のパスワードストアを再発明しないでください。あなたが持っているものを使用してください。 Linuxの世界は主に次の点に焦点を当てています。GNOMEキーチェーン。海馬キーリングをナビゲートして変更し、マスターパスワードを設定するための便利なGUIが提供されています。キーリングは、以下を使用してコマンドラインで照会できます。secret-tool
便利です。
secret-tool store --label='Foobar webservice' service foobar account bob
pw=$(secret-tool lookup service foobar account bob)
リポジトリのパスワードは自動的に期限切れになりませんが、リポジトリへのアクセスは期限切れになります。
答え2
私も同様の状況で、gpg
公開/秘密鍵暗号化を使用(乱用?)します。良い点は、ほとんどのシステムで特定のキーに対してアクセス制限が設定されていることです。パスワードは5〜10分間保持されるため、パスワードを1回だけ入力しても使用でき、次の間に有効期限が切れます。次のような非使用sudo
結果を (subprocess.check_output())に簡単に入れることができますbash
。Python
暗号化、つまり保存の場合、アクセス制限パスワードに新しいパスワードを提供する必要もありません。
私は通常、そのペアへのアクセスを維持したくないので、一般的な公開/秘密鍵ペアを使用しません。後でわかったpass
ほぼ同じように動作し、複数のパスワードファイルを管理し、このプログラムが使用する同じ原則に基づいて、私が使用するPythonプログラムを設定します。
答え3
ここにあります:
#!/bin/bash
newTS=`date +%s`
if test -r ~/.password
then
. ~/.password
else
TS=0
fi
if test `expr $newTS - $TS` -gt 900
then
# outdated password record
rm -f ~/.password
printf "Please enter your password: "
read password
printf "export TS=$newTS\nexport password=$password\n" > ~/.password
fi
echo "using password: $password"
~/.password
注:名前を変更しないと、古いコードはファイルを上書きします。