はじめに
Ubuntu上でCopilot CLIを使って login したとき、以下のようにトークンを平文保存するか聞かれました。
The system vault (keychain, keyring, password manager, etc.) is not available.
You may need to install one.
Would you like to store the token in the plain text config file instead?
❯ 1. Yes, I accept that risk.
2. No, I will login each time I use Copilot
「1.平文で保存する」も「2.毎回ログインする」もやりたくなかったので、解消までにやった作業をメモします。
経緯
環境
- Ubuntu 24.04.1 LTS(WSL2ではない)
- SSH ログイン可能
- xrdpでリモートデスクトップ可能(設定)
- Ubuntuにディスプレイをつないで直接画面を見るのは困難
現象の発生まで
- 安定版のnpmをインストール(方法)
sudo npm install -g @github/copilotcopilot login- 指示に従い、ブラウザでログイン、認証
- ubuntuターミナル上で冒頭記載のメッセージを確認
平文で保存したくないので、2を選ぶか、ctrl+C等で停止します。
メッセージの意味
デフォルトのシステムボルトがないため、githubへのログイントークンを安全に保存できず、平文で保存するか、Copilot CLI起動のたびにログインするかを選べ、という内容でした。
毎回ログインは面倒だが平文で保存もしたくないので、システムボルトで安全に保存できるようにしたいです。
対応
現状確認
まず secret-tool、gnome-keyring-daemon、D-Bus の状態を確認しました。
command -v secret-tool
ps aux | grep gnome-keyring-daemon | grep -v grep
echo "$DBUS_SESSION_BUS_ADDRESS"
自分の環境では以下のような状態でした。
-
secret-toolは存在する -
gnome-keyring-daemonも動いている -
DBUS_SESSION_BUS_ADDRESSも入っている
もしインストールされていないようでしたら、以下のコマンドで入れるといいと思います。
sudo apt update
sudo apt install -y libsecret-tools gnome-keyring dbus-x11 dbus-user-session
# インストール後、再ログイン
keyringの動作確認
次に、Copilot CLI ではなく secret-tool 単体で保存テストをしたところ、保存先の collectionがロックされているとメッセージが出ました。
secret-tool store --label="copilot-test" service copilot-cli test ping
secret-tool: Cannot create an item in a locked collection
通常はログイン時にアンロックされることが期待されますが、sshログインのためかうまく行っていないようです。ここまででcopilotというよりは、keyring側の問題とわかりました。
リモートデスクトップで動作確認
ssh以外の方法でログインしたらうまくいくか試したかったのですが、直接、PCに画面をつなぐのは、設置場所的に難しかったので、リモートデスクトップで試すことにしました。
MacBookをクライアントとして、window appでxrdpでリモートデスクトップ接続して、Ubuntuに入りました。
ターミナルを開いて以下を実行しました。
secret-tool store --label="copilot-test" service copilot-cli test ping
すると、GUI で認証ダイアログが出ました。
内容は以下のような感じでした。
- login keyring はログイン時に unlock されていない
- 今ここでパスワードを入れて unlock してほしい
そこで Ubuntu のパスワードを入れて Unlock しました。
そのあと SSH セッションでもう一度検証
その後、SSH セッションに戻って同じ確認をしました。
secret-tool store --label="copilot-test" service copilot-cli test ping
secret-tool search service copilot-cli
今度は保存できて、検索も通りました。
出力は以下のような感じでした。
[/16]
label = copilot-test
secret = a
created = ...
modified = ...
schema = org.freedesktop.Secret.Generic
attribute.test = ping
attribute.service = copilot-cli
最後に Copilot CLI をやり直した
同じ SSH セッションから Copilot CLI をやり直しました。
copilot logout
copilot login
すると、もう平文保存を聞かれなくなりました。
一旦は解決です。
残課題
今回は一旦動いたので良しとしますが、sshログインだけでは自動unlockされない問題は残っているため、PCを再起動すると、同じ手順が必要になる可能性が高いです。
また、コマンド、手順についてはChatGPTと相談しながらの手探りのため、必ずしも必要十分でない可能性があります。