1Passwordの指紋認証を8時間スキップするCLIツール「once」

Once: Cache CLI Commands

コマンドの出力をメモリ内にキャッシュし、同じコマンド・ディレクトリ・テナントキーの再実行を高速化するCLIツール。1Passwordからのシークレット読み取り時に毎回指紋認証を求められる問題を解決する。TTLや絶対時刻による有効期限、ディレクトリ非依存のキャッシュ、テナントキーによるコンテキスト分離に対応。Unixソケットとファイルパーミッションで他ユーザーから保護し、デーモンは最後のエントリ失効後に自動停止する。

最初の呼び出しでは指紋認証を求められるが、同じテナントキーを使った8時間以内の以降の呼び出しでは求められない。
  1. aktau

    こういうツールはとても便利だ。自分も memo というのを使っている(単なるシェルスクリプトだ: https://github.com/aktau/dotfiles/blob/master/bin/memo)。

    これは https://news.ycombinator.com/item?id=45670052 で議論されていて、他の人たちも自分たちのツール(bkt(1) や up(1) など)を紹介していた。

    自分が見る主な違いはこうだ:

    - memo はビルド不要(シェルスクリプトだから)

    - once は出力キャッシュを実行中のデーモンに保持する。対照的に memo は /tmp 以下に、利用可能な最良の圧縮方式(zstd を優先)で内容を保存する。そこにはトレードオフがある。セキュリティ面でもっとパレート最適なのは、一種のセッションキーを持ち、ディスク上のファイルを圧縮してから暗号化することかもしれない。

  2. __MatrixMan__

    アプリケーションが自分の出力について十分なメタデータを公開してくれて、OS が再実行が必要かどうかを、こちらが指定しなくても判断できる世界を夢見ている。

    NixOS はビルドについてはこれをやっているが、任意のプロセスに一般化された例は見たことがない。

  3. xuhu

    コマンドの前に "once" を付けなくてもこれが動けばいいのに。特に、詳細出力付きでコマンドを実行した後で、その出力から何かを grep したくなったときとか。ターミナルはスクロールバックバッファに出力を持っているのだから、次のように実行できる "output" コマンドを書くだけの話かもしれない:

    $ cmake ..

    $ output | grep "libssl version"

  4. deadbunny

    ターミナルでキャッシュ無効化を扱いたいとずっと思っていた。

  5. giancarlostoro

    > 典型的なユースケース: 1Password から秘密情報を読むときに、読み取りのたびに指紋認証で承認しなくて済む。

    うーん、それはちょっとどうかな、chief。

この日のほかの記事

2026-10-09