
Shai-hulud対策の一つとしてGitHubのPersonal Access Token参照をローカル平文から1Password経由に切り替える
1Passwordには多くのセキュリティ機能がありますが、活用しきれていないこともあるでしょう。詳細は1Password Developerのドキュメントで確認できます。
- Use 1Password to securely authenticate the GitHub CLI
- 1Password for SSH & Git
npm経由で広範囲に感染するマルウェアShai-huludの新種が発見されましたが、対策としてセキュリティ機能を活用したGitHub Personal Access Tokenをローカルの平文保存からGitHub CLI経由での管理に切り替えが効果的です。
以下の公式マニュアルを参考に操作した記録となります。
1Passwordへサインインする
事前に1Passwordのサインイン情報を準備しておきます。デスクトップの1Passwordクライアントにログインできれば問題ありません。
次に、以下のコマンドにてサインインを行います。
op signin
ログインできたら、次のコマンドを入力することでGitHub Personal Access Tokenの設定開始となります。
op plugin init gh
利用するGitHub Personal Access Tokenの設定
方法は2つあります。操作時にtype to filterと表示されますが、これは複数のPersonal Access Tokenが登録済みの場合に絞り込むための機能です。初回は使用できません。

Import a new item
GitHub Personal Access Tokenを1Password上にまだ登録していないが、GitHub上からすぐにコピーできる場合は、こちらを選択します。手順は以下の通りです。
- Tokenをペースト
- Tokenの保存名指定
- 保存先Vaultの指定
Select an existing item
GitHub Personal Access Tokenを既に1Password上に登録している場合は、こちらを選択します。
1Password上でGitHub Personal Access Tokenとして認識させるには、フィールド名を指定のものにする必要があります。フィールド名がマッチしない場合は変更を行います。
To continue, you'll have to update the field names. This can be done interactively. Proceed? [Y/n]
? op: Select the field to be renamed to "token": 認証情報
? op: Select the field to be renamed to "host": ホスト名
認証情報とホスト名のフィールド名になっていたのは、API認証情報のアイテムにPersonal Access Tokenを保存していたためです。
認証情報のスコープ指定
Personal Access Tokenの使いまわしをどこまで許容するか、という設定です。
プロジェクト毎にTokenを使い分けている場合はUse automatically when in this directory or subdirectoriesを選択します。都度発行する場合など、より厳重なセキュリティが必要な場合はPrompt me for each new terminal sessionが適しています。Use as global default on my systemはセキュリティ上の問題が発生する可能性があるため推奨しません。
設定を有効にする
設定をshellのrcファイルに追加します。以下はzshrcのケースです。1Passwordドキュメントの手順にはBash、fishのケースも記載されています。
echo "source ~/.config/op/plugins.sh" >> ~/.zshrc && source ~/.zshrc
CLIを実行する
ghコマンドを実行することで、認証を試します。
gh issue list
ローカルから平文のToken記述を除去する
該当するファイルやテキストを削除します。見つけるのが難しい場合は、ClaudeCodeなどのAIツールを使ってプロンプトで検索すると便利です。
あとがき
GitHub Personal Access Tokenについては1Password上に記録済みで、plugin.shの設定も完了していたのですが、Vault上にあるレコードのフィールド名が一致していないため機能していませんでした。
ベータの際に設定をしていた場合でも、念の為再設定することをおすすめします。








