SSH 先で Gemini CLI を使う方法
すでにいくつか issue が出ているのでまあそのうち治るだろうけど、はやく使いたかったので以下の手順を実施した
Gemini CLI を clone してくる
--depth 1 でいいです
自分のタイミングでは main の HEAD は 6991ba1387436f2a0da995a8c3d3713f186a6544 だった
で npm install
oauth2.ts に URL を開く処理があるので…
6991ba1387436f2a0da995a8c3d3713f186a6544 だと70 行目くらい
ここにパッチあてる
6991ba1387436f2a0da995a8c3d3713f186a6544 に対してはこんな感じ
code:.patch
From 32367a3429827a62d7473066ca621c39ac4e8dca Mon Sep 17 00:00:00 2001
From: ikr7 <foo@example.com>
Date: Wed, 25 Jun 2025 23:59:32 +0900
Subject: PATCH write auth url to /tmp ---
packages/core/src/code_assist/oauth2.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/core/src/code_assist/oauth2.ts b/packages/core/src/code_assist/oauth2.ts
index 68f6e137..a2519c25 100644
--- a/packages/core/src/code_assist/oauth2.ts
+++ b/packages/core/src/code_assist/oauth2.ts
@@ -71,6 +71,7 @@ export async function getOauthClient(): Promise<OAuth2Client> {
Otherwise navigate to:\n\n${webLogin.authUrl}\n\n,
);
await open(webLogin.authUrl);
+ await fs.writeFile("/tmp/gemini_auth_url.txt", webLogin.authUrl);
console.log('Waiting for authentication...');
await webLogin.loginCompletePromise;
--
2.49.0
書いたら npm run build して npm start して Google ログインを選択すると /tmp/gemini_auth_url.txt に URL が書き出されるのでこれをブラウザで開く
Google ログインしたあと http://localhost: …で始まる URL にリダイレクトされるので、ここに SSH 先のサーバで curl -L <redirected_url> する
-L いらないかも?
おわり。これで ~/.gemini にクレデンシャルが置かれるのであとはパッチ当ててない普通にインストールしたほうの Gemini CLI を使っていい。
追記:ローカル(SSH クライアント側)で認証してクレデンシャルが入った JSON を SSH 先にコピーしてもいいらしい…が、自分の SSH クライアントの Windows は Node も Docker も WSL も本当に何も入っていないのでこのような手順を取った。