本文へスキップ
Triwarden

ガイド · SSH エージェント

SSH 鍵を、
保管庫に。

Triwarden は保管庫の SSH 鍵を使い、ssh と git のエージェントとして動作します。署名はアプリ内で行い、クライアントには秘密鍵ではなく署名を返します。承認の頻度は設定できます。

ssh · gitソケットTriwardenあなたが承認署名
ssh が署名を要求すると、Triwarden は承認状態を確認。必要に応じて Touch ID または Mac のパスワードで確認し、署名を返します。

設定

4 つの手順で、
SSH エージェントを設定。

  1. 01

    エージェントをオンにする

    Triwarden › 設定 › デベロッパで Triwarden を SSH エージェントとして使うをオンにします。アプリが開いている間に動き、鍵を提供するのは保管庫のロックが解除されているときだけです。

    Triwarden Settings › Developer: Use Triwarden as SSH agent, Ask before signing, and SSH setup with Copy buttonsTriwarden Settings › Developer: Use Triwarden as SSH agent, Ask before signing, and SSH setup with Copy buttons
  2. 02

    鍵を追加する

    SSH 鍵の項目を作ります。Ed25519 鍵を生成で新しく作るか、手持ちの秘密鍵を貼り付けます — 暗号化されていない OpenSSH 鍵(-----BEGIN OPENSSH PRIVATE KEY-----)。Ed25519、ECDSA(P-256、P-384、P-521)、RSA に対応し、ほかの Bitwarden アプリで保存した SSH 鍵も表示されます。

    パスフレーズ付きの鍵は?エージェントは暗号化された鍵を使えません。暗号化していないコピーを作って項目に貼り付け、コピーは削除してください — その後は保管庫が暗号化して守ります。

    New SSH Key in the detail panel: name, folder, private key with Generate Ed25519 Key, public key and fingerprintNew SSH Key in the detail panel: name, folder, private key with Generate Ed25519 Key, public key and fingerprint
    Remove a passphrase (on a copy)
    cp ~/.ssh/id_ed25519 /tmp/key
    ssh-keygen -p -N "" -f /tmp/key
    # paste /tmp/key into the item, then:
    rm /tmp/key
    
  3. 03

    ssh に場所を教える

    エージェントを ~/.ssh/config に追加します — 設定 › デベロッパ › SSH の設定に、あなたのパスが入ったコピーボタンがあります。1 つのシェルだけに設定することもできます。

    おすすめは設定ファイル:Dock から開くアプリ(VS Code、Tower、Fork、Xcode)はシェルの変数を読みませんが、ssh は毎回設定ファイルを読みます。

    ~/.ssh/config
    Host *
      IdentityAgent "~/Library/Group Containers/…/agent.sock"
    
    zsh
    export SSH_AUTH_SOCK="$HOME/Library/Group Containers/…/agent.sock"
    
  4. 04

    動くか確かめる

    ssh-add -L で、エージェントが提供する公開鍵が一覧されます。何も出ない場合は下の対処法を。

    Terminal
    ssh-add -L
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKx…Qx9 GitHub
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM2…7mK homelab
    

いつもの使い方

ssh を使う
あらゆる場所で。

GitHub と GitLab

項目の公開鍵を GitHub › Settings › SSH and GPG keys に Authentication key として登録します(GitLab:User settings › SSH keys)。そして確認:

Terminal
ssh -T [email protected]
# Triwarden asks: allow “ssh” to sign with “GitHub”
Hi alexchen! You've successfully authenticated, but GitHub does not provide shell access.

自分のサーバ

公開鍵をサーバーの ~/.ssh/authorized_keys に追加して ssh で接続。Triwarden のエージェントは秘密鍵を ssh に渡さず、署名を返します。

Terminal
ssh [email protected] 'cat >> ~/.ssh/authorized_keys' < homelab.pub
ssh [email protected]

署名付きの git コミット

鍵のページの Git 署名 › 設定をコピーで、この 3 行が手に入ります。同じ公開鍵を GitHub に Signing key として登録すれば、コミットに Verified が付きます。

Git signing › Copy Setup
git config --global gpg.format ssh
git config --global user.signingkey "key::ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKx…Qx9 GitHub"
git config --global commit.gpgsign true

ローカルでも署名を確認するなら、信頼する鍵を一覧にします:

Terminal
echo "[email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKx…Qx9" >> ~/.ssh/allowed_signers
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
git log --show-signature -1
Good "git" signature for [email protected] with ED25519 key SHA256:…

鍵が複数あるとき

鍵が多いと、正しい鍵にたどり着く前にサーバが「Too many authentication failures」で止まることがあります。その鍵の公開鍵をファイルに保存して、ホストに結び付けます:

~/.ssh/config
Host github.com
  IdentityFile ~/.ssh/github.pub
  IdentitiesOnly yes

一部のホストだけ

ほかは別のエージェントを使いたい?指定したホストだけ Triwarden を使います:

~/.ssh/config
Host github.com gitlab.com nas.home.arpa
  IdentityAgent "~/Library/Group Containers/…/agent.sock"

Git アプリとエディタ

VS Code、Tower、Fork、Xcode など、システムの ssh を使うアプリは ~/.ssh/config を読むので、ステップ 3 が済めばそのまま使えます。承認の確認も同じように出ます。

承認

署名を承認するタイミングは、
あなたが決める。

リクエストごとに、プログラムと鍵が表示されます —「ssh が SSH 鍵 GitHub で署名するのを許可」。確認の頻度は 設定 › デベロッパ › 署名前に確認 で選べます:

毎回
標準:署名ごとに 1 回確認
アプリごとに 1 分に 1 回
git fetch が続くときに便利
アプリごとに 10 分に 1 回
長い作業向け。ロックすると忘れます

Touch ID を使えない場合は、Mac のパスワードで承認できます。拒否でリクエストを断れます。「設定 › デベロッパ」で最近の承認・拒否を確認できます。

対処法

うまく
動かないとき。

「The agent has no identities.」

保管庫がロック中、エージェントがオフ、SSH 鍵の項目がない、または項目の鍵にパスフレーズが付いています(暗号化された鍵は提供されません)。

「Could not open a connection to your authentication agent」

このシェルがエージェントの場所を知りません。IdentityAgent の行を ~/.ssh/config に追加するか、そのシェルでステップ 3 の export を実行してください。

「agent refused operation」

リクエストが拒否されたか、確認がタイムアウトしました。もう一度実行して承認してください。

「Too many authentication failures」

正しい鍵の前にサーバがあきらめました。鍵をホストに結び付けてください(上の「鍵が複数あるとき」)。

いつでも始められます。

SSH エージェントも個人利用は無料です。仕事での利用にはライセンスが必要です。

Mac 版をダウンロード