1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ちぃママ「WSL2で1passwordが動きませ~~ん💦💦」

1
Posted at

Windows版1Password入れたアンタ、それ"認証が死ぬ罠"よ💋 WSL2でSSOを通す唯一の正解

🍸 今夜のお持ち帰り(先出し)

  • SSO強制の1Passwordは、CLI単体(op account add)ではログインできない。デスクトップアプリ連携が必須
  • WSL2では Windows版じゃなくて、WSLの中にLinux版アプリ を入れるのが正解
  • SSOサインインは WSL内のLinuxブラウザ で完結させること(Windowsブラウザに飛ばすと鍵が戻らない)
  • ゴールは op run --env-file=.env.op -- <cmd> がネイティブに動く状態。マルチライン PEM もそのまま注入できる

詳しくは最後の「お持ち帰り(本編)」でまとめるわね💋


🍑 オープニング:アタシ、認証が一生通らないんですぅ

👩‍🎤ちぃママ: ママぁ〜‼️ アタシね、WSL2で開発してるんですけど、.env に APIキーをベタ書きするのやめたくて、1Passwordから流し込もうとしたんですぅ💦

👩ママ: あら、いい心がけじゃないの💋 平文の .env なんて、財布を開けっぱなしでカウンターに置いとくようなものよ。それで、何をやらかしたの?

👩‍🎤ちぃママ: とりあえずWindowsに1Passwordのアプリ入れて、op.exe も入れて、サインインしようとしたんですけどぉ… SSOの画面のあと、認証が 一生戻ってこない んですよぉ‼️ アタシのアカウント、永久迷子なのッ⁉️

👩ママ: ちょっとアンタァァァ‼️ そこが 一番ハマるとこ じゃないのよッ💢 順番に解いてあげるから、グラス置いて聞きなさいな💋


🔍 なぜこんなに難しいの?──「二重の壁」があるのよ

👩‍🎤ちぃママ: だってぇ、いつもの1Passwordなら、シークレットキーとマスターパスワードでログインできるじゃないですかぁ。

👩ママ: そこなのよ、ちぃママ。アンタの会社、Okta だか Google Workspace だかの SSO強制 でしょ? あれはね、シークレットキーもマスターパスワードも持ってない のよ。認証ぜんぶIdP(会社の認証基盤)に丸投げしてるの。

👩‍🎤ちぃママ: えぇぇ⁉️ じゃあ op account add で手でサインインってのが…

👩ママ: 使えないの💋 SSOアカウントは、デスクトップアプリ経由でしかセッションを取れない。これが 一つ目の壁 ね。

👩‍🎤ちぃママ: ぎゃー‼️ じゃあアタシ、Windowsにアプリ入れたの正解だったんじゃ…

👩ママ: それが 二つ目の壁 なのよ、おバカちゃん💋 Windows版アプリ+op.exe で繋ぐと、op.exe run -- <cmd> が子プロセスを Windowsプロセスとして 起動するの。アンタがWSLの中で動かしたい uv も uvicorn も docker も、ぜんぶLinux育ちでしょ? Windowsのお父さんからは生まれてこないのよ。

👩‍🎤ちぃママ: な… ななななななな。壁が二枚⁉️

ここで起きていることを整理しておきます。

二重の壁

  1. SSOの壁:SSOアカウントは Secret Key / マスターパスワードを持たず、認証をIdPに委譲する。そのため手動サインイン(op account add)が使えず、op はデスクトップアプリ経由でしかセッションを取得できない。
  2. WSLの壁:Windows版デスクトップアプリ+Windows版 op.exe で繋ぐと、op.exe run が子プロセスをWindowsプロセスとして起動するため、WSL内のLinux native な uv / uvicorn / docker を起動できない。

👩ママ: この2枚を 同時に ぶち抜く方法はね──「WSLの中にLinux版デスクトップアプリを置く」。これ一択よ💋


🪩 正解の全体構成

👩‍🎤ちぃママ: 全体像が見たいですぅ〜!アタシ、絵がないと迷子になるタチなんですよぉ💦

👩ママ: はいはい、まとめてあげるわね💋

👩ママ: ポイントはね、サインインも、CLI連携も、コマンド実行も、ぜ〜んぶWSLの中で閉じてる ってこと。Windows側に鍵を渡さないの。これが鉄則よ💋


🛠️ 前提条件チェック

👩‍🎤ちぃママ: いきなりインストールしていいですかぁ⁉️

👩ママ: お待ちなさいな💋 Linux版デスクトップアプリを動かすには、WSLg(GUI) と systemd が要るのよ。まずは身体検査からね。

ps -p 1 -o comm=                 # systemd であること
ls -d /mnt/wslg                  # WSLg が存在すること
echo "$DISPLAY $WAYLAND_DISPLAY" # :0 wayland-0 など
cat /etc/wsl.conf                # [boot] systemd=true

👩ママ: もし systemd が無効だったら、/etc/wsl.conf にこう書いて、PowerShellから wsl --shutdown で一回寝かせて起こしなさいな。

/etc/wsl.conf
[boot]
systemd=true

💄 手順:壁を抜けるための7ステップ

Step 1. WSLに Linux版 op CLI を入れる

👩ママ: まずは正規の鍵とリポジトリを登録してから、CLIを入れるのよ💋

curl -sS https://downloads.1password.com/linux/keys/1password.asc | \
  sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/$(dpkg --print-architecture) stable main" | \
  sudo tee /etc/apt/sources.list.d/1password.list
sudo mkdir -p /etc/debsig/policies/AC2D62742012EA22/
curl -sS https://downloads.1password.com/linux/debian/debsig/1password.pol | \
  sudo tee /etc/debsig/policies/AC2D62742012EA22/1password.pol
sudo mkdir -p /usr/share/debsig/keyrings/AC2D62742012EA22
curl -sS https://downloads.1password.com/linux/keys/1password.asc | \
  sudo gpg --dearmor --output /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg
sudo apt update && sudo apt install -y 1password-cli
op --version

Step 2. Linux版デスクトップアプリ+依存を入れる

sudo apt install -y 1password polkitd gnome-keyring

👩ママ: それぞれ役割があるのよ💋

  • 1password … GUIデスクトップアプリ本体(リポジトリは Step 1 で追加済み)
  • polkitd … 「Unlock using system authentication」に必須
  • gnome-keyring … 認証情報の保管庫

Step 3.(最重要)SSO用に WSL内 Linuxブラウザ を用意する

👩‍🎤ちぃママ: あっ、ここですよねッ‼️ アタシが認証迷子になったの‼️

👩ママ: そうよ、ここが 一番ハマる とこ💋 Windowsブラウザ(wslview)を既定にすると、SSO後の onepassword:// コールバックを Windows版アプリが横取り して、WSLのLinuxアプリに鍵が渡らないの。だから SSOフロー全体をWSL内ブラウザで完結 させるのよ。

Linux版の Google Chrome(公式 .deb)を入れる例です。

wget -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y /tmp/chrome.deb

既定ブラウザをLinux Chromeにします。

xdg-settings set default-web-browser google-chrome.desktop
# 確認:onepassword スキームが Linux アプリに向いていること
xdg-mime query default x-scheme-handler/onepassword   # -> 1password.desktop

x-scheme-handler/onepassword は1Passwordの .deb が自動で 1password.desktop に登録してくれます。あとは http / https ハンドラをLinuxブラウザに向ければ、認証もコールバックもWSL内で閉じます。

Step 4. WSLgで Chromeのカーソルが消える問題に対処

👩‍🎤ちぃママ: ママぁ〜、Chrome開いたらマウスカーソルが透明人間になったんですけどぉ⁉️ 心霊現象ですかぁ⁉️

👩ママ: 幽霊じゃないわよ💋 WSLg+Chromeで、XWayland経由だと XCURSOR_THEME が未設定でカーソルのビットマップを読めないの。.desktop に環境変数とフラグを仕込めば成仏するわ。

mkdir -p ~/.local/share/applications
sed 's#^Exec=/usr/bin/google-chrome-stable#Exec=env XCURSOR_THEME=Adwaita XCURSOR_SIZE=24 /usr/bin/google-chrome-stable --ozone-platform=x11#' \
  /usr/share/applications/google-chrome.desktop > ~/.local/share/applications/google-chrome.desktop
update-desktop-database ~/.local/share/applications
  • XCURSOR_THEME=Adwaita … カーソルテーマを明示(/usr/share/icons/Adwaita/cursors が必要。無ければ sudo apt install adwaita-icon-theme)
  • --ozone-platform=x11 … XWayland強制(カーソル描画が安定する)
  • それでもダメなら wsl を再起動 wsl.exe --shutdown

既存のChromeが起動中だと、xdg-open は既存インスタンスに新タブを開くだけでフラグが効きません。必ず pkill -f google-chrome してから再起動してください。

Step 5. SSOサインイン+新デバイス鍵転送

👩ママ: ここまで来たらアプリを起こすのよ💋

1password &
  1. SSO(IdP / Google)でサインイン → WSL内のChrome が開いて認証
  2. 「Transfer your encryption key(暗号鍵の転送)」モーダルが出る場合がある
  3. これはSSO特有の 新デバイス認証。すでに認証済みの別の1Password(他デバイスやブラウザ拡張)に確認コードを出させて入力する必要がある
  4. 目的のVaultが見えたらサインイン成功💋

👩‍🎤ちぃママ: 暗号鍵の転送…⁉️ なんだか壮大ですぅ🌠

👩ママ: 大げさに聞こえるけど、要は「この新顔(WSLのアプリ)、信用していい子?」って既存の自分に確認してるだけよ💋 スマホの1Passwordか、別PCの1Passwordを認証元に使いなさいな。

Step 6. CLI連携を有効化

👩ママ: Linuxデスクトップアプリの設定で、2つのトグルをONにするのよ💋

  • Settings → Security →「Unlock using system authentication」を ON(polkitを使う)
  • Settings → Developer →「Integrate with 1Password CLI」を ON

確認はこうね。

op account list   # アカウントが表示される
op vault list     # Vault 一覧が出る

Step 7. 動作検証(op run の注入確認)

👩‍🎤ちぃママ: ちゃんと注入できてるか、不安なんですけどぉ💦 値を画面に出して確認しちゃダメなんですよねぇ?

👩ママ: えらいじゃないの💋 そう、値は漏らさず に確認するのよ。こうやるの。

# .env.op の全参照が解決できるか(値は出力せず破棄)
op inject -i .env.op > /dev/null && echo OK

# op run が実際に env へ注入できるか(値を漏らさず確認)
op run --env-file=.env.op -- bash -c '
  [ -n "$OPENAI_API_KEY" ] && echo "OPENAI_API_KEY injected"
  lines=$(printf "%s" "$ANYFLOW_JWT_PRIVATE_KEY" | wc -l)
  [ "$lines" -gt 1 ] && echo "multiline PEM injected ($lines lines)"
'

op run は exec で直接プロセスの env に値をセットするため、マルチライン PEM もそのまま渡せる のがポイントです。


🚨 ハマりどころ early-warning 集

👩ママ: よく踏む地雷をまとめておくわね💋 ヒヤッとしたら、まずここを見なさいな。

症状 原因 対処
op account list が空 / "No accounts configured" CLI連携トグルが未ON Step 6
SSOコールバックがWindows版アプリに吸われる 既定ブラウザが wslview(Windows) Step 3:Linuxブラウザを既定に
Chromeのカーソルが消える XWaylandのカーソルテーマ未設定 Step 4
「Unlock using system authentication」が押せない polkit未導入 sudo apt install polkitd
「暗号鍵の転送」でCancelしかない 新デバイス認証の確認コード元が無い 既存認証済み1Passwordから発行
WSL再起動後に op が動かない Linuxアプリ未起動 / 未アンロック アプリを起動・アンロック

💋 なぜ「op.exe + inject」方式を採らないの?

👩‍🎤ちぃママ: ママぁ、ネットだとぉ、Windows版アプリと op.exe を使って eval $(op.exe inject -i .env.op) で流し込む記事も見るんですけどぉ。あれじゃダメなんですかぁ?

👩ママ: Windows Helloが使える利点はあるのよ。あるんだけどね、ちぃママ💋 致命傷が二つあるの。

👩ママ: 一つ目──マルチライン PEM(KEY=op://.../pem)だと、eval や source が 壊れる の。2行目以降をシェルコマンドだと勘違いして実行しちゃうのよ。秘密鍵がコマンドとして暴走するなんて、悪夢でしょ?

👩‍🎤ちぃママ: ぎゃー‼️ 鍵が勝手に踊り出すんですねぇ‼️

👩ママ: 二つ目──チーム標準の op run --env-file=.env.op -- <cmd> を そのまま使えない。全コマンドにWSL専用の書き方が必要になるの。チームのみんなと違う呪文を唱える羽目になるのよ💋

op run 互換と、マルチライン PEM 対応を 両立 できるのはLinux版アプリ方式だけ。だからこっちを推奨するわ💋


🌹 お持ち帰り(本編)

👩ママ: さ、今夜のまとめよ💋 これだけ覚えて帰りなさいな。

🍸 WSL2 × SSO 1Password 完全攻略

  1. SSO強制アカウントは デスクトップアプリ連携が必須(op account add は使えない)
  2. WSL2では WSLの中にLinux版デスクトップアプリ を置く(Windows版は子プロセスをWindows化してLinuxツールを殺す)
  3. SSOサインインは WSL内のLinuxブラウザ で完結させる(onepassword:// コールバックをWindowsに横取りさせない)
  4. CLI連携の2トグル(system authentication / Integrate with CLI)をONにする
  5. ゴールは op run --env-file=.env.op -- <cmd> がネイティブに動く状態。マルチライン PEM もそのまま注入 でき、.env 平文を卒業できる

👩‍🎤ちぃママ: ママぁ〜‼️ アタシ、Windows版を入れた瞬間に詰んでたんですねぇ… 遠回りしちゃったぁ💦

👩ママ: いいのよ、ちぃママ💋 遠回りした人ほど、どこで道が折れるか を身体で覚えるの。秘密ってのはね、財布の中身じゃなくて、渡し方 に品が出るものよ。アンタの .env、今夜やっと淑女になったわね✨

👩‍🎤ちぃママ: 淑女ぉ〜🎵 アタシの環境変数、デビューですぅ‼️

👩ママ: はいはい、デビューはいいから今日はもう閉店💄 また迷子になったら、いつでもいらっしゃい💋

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?