Mar 25th, 2012

Command Line from Keychain on MacOSX

コマンドラインからキーチェインを使う方法

gistコマンドがアップデートされて、パスワードを設定ファイルに書く事になったのだけど、README から security という コマンドラインインターフェースで keychain を扱う方法があることを初めて知ったので、それについて簡単に調べたのでまとめ。

security

コマンドラインインターフェースで扱う時は generic password を用いるようなので、そうすると使えるのは以下の3つ。

  • add-generic-password
  • delete-generic-password
  • find-generic-password

修正用に modify とか change 等のインタフェースは無いようなので delete して add という形になる模様。

追加方法

キーチェインへの追加は以下のようにする。

追加の際のアカウント名 (-a) とサービス名 (-s) は必須。

$ security add-generic-password -s dummy -a d6rkaiz -p dummy_password

上のコマンドを実行するとキーチェインアクセスユーティリティで追加された事が確認出来る。 security add generic password

パスワード検索

キーチェインに追加したパスワードを検索するには追加した時に使ったサービス名で行える。

$ security find-generic-password -gs dummy
keychain: "/Users/d6rkaiz/Library/Keychains/login.keychain"
class: "genp"
attributes:
    0x00000007 <blob>="dummy"
    0x00000008 <blob>=<NULL>
    "acct"<blob>="d6rkaiz"
    (略)
    "type"<uint32>=<NULL>
password: "dummy_password"

削除方法

削除する場合は以下のように行う。

$ security delete-generic-password -s dummy
keychain: "/Users/d6rkaiz/Library/Keychains/login.keychain"
class: "genp"
attributes:
    0x00000007 <blob>="dummy"
    0x00000008 <blob>=<NULL>
    "acct"<blob>="d6rkaiz"
    ()
    "svce"<blob>="dummy"
    "type"<uint32>=<NULL>
password has been deleted.

使いかた

ここにも書かれているけど、以下のようにするとパスワードだけが取得出来るので、設定ファイルにパスワードを直接書く必要性が減ります。

$ security 2>&1 >/dev/null find-generic-password -gs dummy | ruby -e 'print $1 if STDIN.gets =~ /^password: \"(.*)\"$/'

ヘルプを見ると、security には 他にも有用な使い方が出来そう。