シェルの中にパスワードなどを埋め込みたい時はあると思いますが、平文パスワードを埋め込むと不安であったり、ソースコードの管理に混ぜたくない時などの状況があると思います。
その際にとりあえずシェルに埋め込むパスワードやパスフレーズを平文で書かない方法を記載していきます。
平文のパスワードを暗号化する方法
まずはパスワードを暗号化する方法をシェルとして記載します。(シェルにする必要もないのですが)
キーフレーズをホスト名にしているので、ホスト名がわからなければ複合できないというメリットもあります。
ただ、ホスト名を変えるとその後の工程でも変更ありますのでご注意を。
1 2 3 4 5 6 |
#!/bin/bash PLAIN_PASS="hogeH0GE" echo "$PLAIN_PASS" | openssl enc -e -aes-256-cbc -iter 100 -base64 -k "$HOSTNAME" |
こちらを事項すると以下のような結果が返ってきます。
1 2 3 4 |
$ ./encode.sh U2FsdGVkX19wIqy9C7qILB89aIg2vfs6C/L48VvNZbM= |
こちらの暗号化されたパスワードを利用してスクリプトを作成します。
暗号化したパスワードを変数に戻す方法
先程の暗号化パスワードを以下のような形で変数に戻します。
1 2 3 4 5 6 7 8 |
#!/bin/bash ENC_PASS="U2FsdGVkX19wIqy9C7qILB89aIg2vfs6C/L48VvNZbM=" PLAIN_PASS=`echo "$ENC_PASS" | openssl enc -d -aes-256-cbc -iter 100 -base64 -k "$HOSTNAME"` echo $PLAIN_PASS |
暗号化したものと全く同じ形で復元を行なっております。
最後に変数にしたものを表示していますので結果を見てみます。
1 2 3 4 |
$ ./decode.sh hogeH0GE |
こちら最初のスクリプトで設定したものが無事出てきました。
ホスト名がわかるものだとすぐに復元できてしまうので例えば以下のようにロールと組み合わせることでもう少し強度が高いセキュリティ対策なども実施できます。
1 2 3 4 5 6 7 8 |
#!/bin/bash ENC_PASS=`cat /root/enc_pass.txt` PLAIN_PASS=`echo "$ENC_PASS" | openssl enc -d -aes-256-cbc -iter 100 -base64 -k "$HOSTNAME"` echo $PLAIN_PASS |
用途や利用シーンに応じて変更してみてください。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など