ラズパイで育てる!自分だけのAI【基礎編】④ pass+GPGで安全にトークン管理
はじめに
🎯 この記事の対象読者
- クレデンシャルが危ない理由を読んで、クレデンシャルの危険性を理解した方
- Discord Bot Token や API キーを安全に管理したい方
- Raspberry Pi に SSH で作業する環境がある方
前提知識: Docker 動作済み(Dockerセットアップ)、OpenClaw のセキュリティリスクを把握済み
前回はクレデンシャルが「チャット履歴に残る」「設定ファイルに平文で書かれる」というリスクを見てきました。
では、どうすれば安全に管理できるのか。この記事では pass(Unix Password Store) を使って Discord Bot Token と Gemini API Key を GPG 暗号化して保管する手順を解説します。
次の記事でこれを Docker コンテナに環境変数として渡す流れになります。
pass とは
🔑 pass は Unix の哲学に従ったシンプルなパスワードマネージャーです。
仕組みはシンプルで、シークレットを GPG で暗号化した .gpg ファイル として ~/.password-store/ に保存します。
~/.password-store/
├── discord/
│ └── openclaw.gpg ← 暗号化された Discord Bot Token
└── gemini/
└── openclaw.gpg ← 暗号化された Gemini API Key
pass show discord/openclaw を実行すると GPG が復号して値を表示します。
$(pass show discord/openclaw) の形で他のコマンドにも渡せます。
ステップ 1: SSH でラズパイに接続
ssh pi@<ラズパイのIPアドレス>
以降のコマンドはすべて Pi 上で実行します。
ステップ 2: pass と gnupg をインストール
sudo apt-get update && sudo apt-get install -y pass gnupg
確認します。
pass --version
# → pass 1.7.x
gpg --version
# → gpg (GnuPG) 2.x.x
ステップ 3: GPG 鍵を作成する
pass は GPG 鍵を使ってシークレットを暗号化します。まず鍵を生成します。
バッチ方式で非対話生成
GPG の対話プロンプトは扱いが複雑なので、バッチ方式で生成します。
以下をそのまま Pi で実行してください。
gpg --batch --gen-key <<'EOF'
%no-protection
Key-Type: RSA
Key-Length: 3072
Name-Real: your-name
Name-Email: your-email@example.com
Expire-Date: 0
%commit
EOF
<details>
<summary>Name-Real / Name-Email について</summary>
GPG 鍵の UID(所有者識別子)です。メールは実際には送信されません。
ローカル用途であればダミーで構いません。
用途が分かる名前にすると、複数の鍵を持つようになったときに gpg --list-keys で識別しやすくなります。
例:
Name-Real: pi-openclawName-Email: openclaw@pi01.local
</details>
生成確認
gpg --list-keys
以下のような出力が出れば成功です。
pub rsa3072 2026-02-16 [SC]
ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234
uid [ultimate] pi-openclaw <openclaw@pi01.local>
sub rsa3072 2026-02-16 [E]
ステップ 4: pass を初期化する
GPG 鍵のメールアドレスを指定して pass を初期化します。
pass init "openclaw@pi01.local"
~/.password-store/ が作成されます。
pass
# → Password Store(空の状態)
ステップ 5: Discord Bot Token を登録する
Discord Bot Token の取得先はこちらです。
https://discord.com/developers/applications → アプリを選択 → Bot → Token
取得したら Pi で以下を実行します。
pass insert discord/openclaw
プロンプトが表示されるのでトークンをペーストして Enter を押します。
Enter password for discord/openclaw: (ここにペースト)
Retype password for discord/openclaw: (もう一度)
ステップ 6: Gemini API Key を登録する
Gemini API Key の取得先はこちらです。
https://aistudio.google.com/api-keys
pass insert gemini/openclaw
同様にプロンプトへ入力します。
ステップ 7: 確認する
ツリー表示
pass
Password Store
├── discord
│ └── openclaw
└── gemini
└── openclaw
値の確認(先頭のみ表示)
全体を表示したくない場合は先頭だけ確認できます。
pass show discord/openclaw | head -c 20
# → MTQ2OD...(先頭20文字)
pass show gemini/openclaw | head -c 15
# → AIzaSy...(先頭15文字)
ファイルの実体を確認
ls -la ~/.password-store/discord/
# → openclaw.gpg(暗号化済みファイル)
cat しても意味不明なバイナリが返るだけです。GPG 鍵なしに復号はできません。
トークン・キーの更新・削除
トークンを更新したい場合
--force オプションで上書きできます。
pass insert --force discord/openclaw
# → 新しいトークンを入力するプロンプトが表示される
Gemini API Key も同様です。
pass insert --force gemini/openclaw
特定のエントリを削除したい場合
pass rm discord/openclaw
ディレクトリごと削除する場合は -r を付けます。
pass rm -r discord/
pass ストア全体をリセットしたい場合
rm -rf ~/.password-store
再度 pass init から始められます。
GPG 鍵ごと作り直したい場合
まず鍵のフィンガープリントを確認します。
gpg --list-keys
# → pub 行の下に表示される40文字の文字列
gpg --batch --yes --delete-secret-and-public-key <フィンガープリント>
その後、パスワードストアを削除してからステップ 3 に戻ります。
rm -rf ~/.password-store
おわりに
✅ 今回やったこと:
-
pass+gnupgのインストール - GPG 鍵のバッチ生成(パスフレーズなし・PoC 用)
-
pass initでパスワードストアを初期化 - Discord Bot Token と Gemini API Key を暗号化して保存
次の記事では、この pass に保存したトークンを $(pass show ...) で取り出して Docker コンテナに渡し、OpenClaw の onboard を実行します。
基礎編:
- ① Dockerセットアップ
- ② クレデンシャルが危ない理由
- ③ Discord Bot作成・トークン取得
- ④ pass+GPGで安全にトークン管理(本記事)
- ⑤ OpenClawインストール・onboard
- ⑥ Discordチャンネルを追加する
- ⑦ デフォルトポートの危険性とlocalhostバインド
- ⑧ 最新版に保つ更新手順
- ⑨ フォルダ構成を理解する
- ⑩ よく使うコマンドまとめ
Discussion