ほつた@はてな

ほつたが技術的な事や個人的な出来事を中心に投稿します。

pitを使ってソースコードにパスワードなどを書かずにオープンソース化する方法

今までソースコードにパスワードを直書きしていて非常にまずい状態だったので無理やりどうにかしてみた。

Pit

一番手軽そうなのがPitというライブラリ。 使い方は簡単だ。 大好きなRubyを例に紹介するが、Pythonなどでも同様に扱えるみたい。

ruby -r pit -e "Pit.set('hoge', :data=>{'username'=>'hogeid', 'password'=>'hogehoge'})"

require 'pit'

config = Pit.get('hoge')

id = config['id']

pw = config['password']

環境変数生データ問題

ただ設定ファイルが特に暗号化されずに生で環境変数に載ってしまう。

Macの場合 ~/.pit/default.yaml

Windowsの場合 C:\Users\%username%\.pit/default.yaml

暗号化もどき*1

暗号化しようにもWindowsで手軽に暗号化する方法がなくて暗号化もどきをすることで落ち着いた。

require 'base64'
Base64.encode64('hogehoge')
=> "aG9nZWhvZ2U=\n"

これを叩けばdefault.yamlに上書きされる模様。

ruby -r pit -e "Pit.set('hoge', :data=>{'username'=>'hogeid', 'password'=>'aG9nZWhvZ2U=\n'})"
require 'pit'
config = Pit.get('hoge')
Base64.decode64(config['password'])

Pit以外でセキュアな何か

探したもののRubyではなかったと思う。 Macだけなら標準のパスワード保存システムから取ってくるとか出来るけどWindowsでも動作させたいのでPitくらいしかないという結論に至った。

teratail.com

参考

pitの扱い方*2

qiita.com

pitの概要が載ってる。

miyohide.hatenablog.com

パスワードの誤魔化し方が素晴らしい。

pgnote.net

*1: 正確には、見た目を変えてるだけで全く暗号化されてないので注意。

*2:これを見てやっとpitを使うのに成功した