pass
pass はコマンドライン用のシンプルなパスワードマネージャです。パスワードは単純なディレクトリツリー構造の gpg で暗号化されたファイルの中に保存されます。pass はシェルスクリプトであり GnuPG, tree, Git などの既存のツールを利用します。
目次
インストール
任意で qtpass パッケージをインストールすることで Qt 製の GUI を使うことができます。
基本的な使い方
パスワードストアを初期化:
$ pass init <gpg-id or email>
パスワードを挿入、わかりやすい階層名を指定する:
$ pass insert archlinux.org/wiki/username
パスワードストアを確認:
$ pass
Password Store └── archlinux.org └── wiki └── username
新しいランダムなパスワードを生成、<n>
は生成するパスワードの長さ (数字) に置き換えてください:
$ pass generate archlinux.org/wiki/username <n>
パスワードを再取得、gpg のパスワードの入力を求められます:
$ pass archlinux.org/wiki/username
Xorg を使っていて xclip をインストールしている場合、以下のコマンドで取得したパスワードを一時的にクリップボードにコピーできます:
$ pass -c archlinux.org/wiki/username
pass には検索やコピーを楽にする dmenu ラッパーが付属しています。使用するには、dmenu をインストールして次のコマンドを実行:
$ passmenu
エントリを選択することクリップボードにパスワードがコピーされます。大文字・小文字の区別などカスタマイズオプションについては man dmenu
を見てください。キーバインドを設定することでアプリケーションから簡単にパスワードが使えるようにすることもできます。
Data organization
By default, the credential file created with pass insert
will only contain your password. However, it may not be enough since several applications ask for detail data like username, url, etc.
You can edit an existing file the way you want with command pass edit password_name
.
Below is the preferred organizational scheme provided by pass-project page. When using the option -c
or --clip
with this scheme, only the password will be copied.
YwrZSNH35z164ym9pI URL: *.amazon.com/* Username: AmazonianChicken@example.com Secret Question 1: What is your childhood best friend's most bizarre superhero fantasy? Oh god, Amazon, it's too awful to say... Phone Support PIN #: 84719
pass への移行
pass のプロジェクトページ に他のプログラムからパスワードをインポートするためのスクリプトが複数記載されています。
拡張
バージョン 1.7 から、pass はコミュニティが開発した拡張をサポートしています。以下の拡張をインストールすることで pass の機能を強化することができます。
- pass-tomb — tomb の中で暗号化されたパスワードストアのツリーを管理します。
- pass-otp — ワンタイムパスワード (OTP) トークンのサポート。
- pass-import — 他のパスワードマネージャからのインポートツール。
- pass-update — 簡単にパスワードをアップデート。
- pass-audit — パスワード リポジトリを監査するための拡張機能。
- pass-coffin — 署名および暗号化された棺桶内のデータを非表示にするパスワード ストア拡張機能。
- pass-tessen — fuzzy なデータ選択とパスワードストアからのコピーアンドペースト。
高度な使い方
環境変数を使うことで pass が使用するパスワードストアのディレクトリや git ディレクトリを変更できます:
PASSWORD_STORE_DIR=/path/to/store
これを使用して複数のパス リポジトリをサポートする方法の詳細については、このリンク を参照してください。
次の pw()
エイリアスの例では、名前付きデータベースの最初の行をクリップボードに送信してから、2 行目を 5 秒後に送信し、最後に OTP コードをその 5 秒後に送信します。パスワードが 1 行目に、ユーザー名が 2 行目にあり、OTP URI が名前付きデータベースのどこかに存在すると仮定すると、ネット効果は、利用可能な(ブラウザなど)入力フィールドに連続してプライマリペーストするために ユーザー名パスワードOTPコード を渡します。:
pw() { export PASSWORD_STORE_CLIP_TIME=8 export PASSWORD_STORE_X_SELECTION=primary pass -c2 $1; sleep 5; pass -c $1; sleep 5; pass otp -c $1; exit }
複数の pass コンテキスト
エイリアスを使うことで様々な pass コンテキストを設定できます。異なるチームで作業を行う場合などに有用です。
~/.bashrc
に以下のエイリアスを追加してください:
alias passred="PASSWORD_STORE_DIR=~/.pass/red pass" alias passblue="PASSWORD_STORE_DIR=~/.pass/blue pass"
bash-completion をインストールして ~/.bash_completion
に以下を追加してください:
source /usr/share/bash-completion/completions/pass _passred(){ PASSWORD_STORE_DIR=~/.pass/red/ _pass } complete -o filenames -o nospace -F _passred passred _passblue(){ PASSWORD_STORE_DIR=~/.pass/blue/ _pass } complete -o filenames -o nospace -F _passblue passblue
~/.pass/red
と ~/.pass/blue
を初期化したら passred
と passblue
エイリアスで2つの pass コンテキストを交互に使うことができます。コンテキストは好きなだけ追加できます。
Git の統合
git
の認証ヘルパーとして pass
を使うことができます。pass-git-helperAUR または pass-git-helper-gitAUR パッケージをインストールしてください。
使用方法
詳しい使い方は github の README ファイル に書かれています。
git
の設定
以下のコマンドを実行して git の認証ヘルパーとして pass-git-helper
をインストール:
$ git config --global credential.helper /usr/bin/pass-git-helper
マッピングファイル
~/.config/pass-git-helper/git-pass-mapping.ini
ファイルを作成してください。git のリモートホストを pass
データベースにマッピングできます。フォーマットは以下の通りです:
[github.com] target=dev/github [*.fooo-bar.*] target=dev/fooo-bar
上記の通りホスト部にはワイルドカードを使うことができます。
パスワードストアレイアウト
pass と同じように、パスワードストアエントリの最初の行にパスワードを指定します。二行目はユーザー名として解釈されます。
機能させるには pass insert --multiline
を使って複数行のパスワードストアエントリを作成する必要があります。
GnuPG と組み合わせたパス用の中央 Git サーバー (SSH の例)
パス用の中央 Git サーバーをセットアップすることにより、パスワード管理システムをセットアップできます。これにより、複数のクライアント環境を介して中央パスワードリポジトリを同期できます。
サーバーにパス用のベア Git リポジトリをインストールする
サーバーで git init --bare ~/.password-store
を実行して、プッシュ先のベアリポジトリを作成します。
認証された ssh 公開鍵のインポート
SSH 鍵#リモートサーバーに公開鍵をコピー を参照してください。
クライアント側
このセクションでは、GnuPG が構成されており、パスワードを暗号化するためのキーペアがあることを前提としています。 ローカルクライアントで、クライアントにローカル パスワードストアがあることを確認してから、Git を介してローカル変更の管理を有効にし、リモート Git リポジトリを追加して、ローカル パス履歴をプッシュします。
# Create local password store pass init <gpg key id> # Enable management of local changes through Git pass git init # Add the the remote git repository as 'origin' pass git remote add origin user@server:~/.password-store # Push your local pass history pass git push -u --all
これで、pass
で始まる標準の Git コマンドを使用できるようになりました。例:pass git push
または pass git pull
pass を使用してパスワードストアを変更すると、自動的にコミットが作成されます。
トラブルシューティング
Encryption failed: Unusable public key
新しいエントリを挿入しようとすると、次のエラーが発生する可能性があります。
$ pass insert archlinux.org/wiki/username
Enter password for archlinux.org/wiki/username: Retype password for archlinux.org/wiki/username: gpg: XXXXXXXXX: There is no assurance this key belongs to the named user gpg: [stdin]: encryption failed: Unusable public key Password encryption aborted.
これは、GnuPG キーの信頼レベルが "ultimate" 以外に設定されている場合に発生します。 pass
に使用されるキーを編集して、その信頼レベルを "ultimate" に設定します。
$ gpg --edit-key your_key_id
> trust > 5