1Password にSSH鍵の管理機能があることを最近になって知ったので,その設定手順をメモとしてまとめます。
設定手順
0. SSHエージェントを有効にする
SSHクライアントが 1Password 内の鍵を使えるようにするため,1Password のSSHエージェントを有効にします。
このSSHエージェントは 1Password 内の鍵を使用しますが,明示的に許可しない限り,鍵が外部に出ることはありません。
1Password ケバブメニュー(︙)より設定画面を開きます。Ctrl + ,
でも開けます。
[開発者]
タブより,[SSHエージェントを使用]
にチェックをいれます。
また,上項目の「1Password開発者エクスペリエンスを表示する」を有効化しておくと,サイドバーに開発者タブが出現します。このメニューではSSHエージェントが管理しているSSH鍵の一覧確認などが可能になります。
1. SSHクライアントの設定
SSHクライアント側でも,1Password を使用するように設定を行います。
・Macの場合
Macの場合,.ssh/config
ファイルに以下を追記します。
Host XXXXXX
...
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
...
・Windowsの場合
Windowsの場合,Microsoft OpenSSH が固定のパイプを使うため,SSHエージェントの場所を指定する必要はありません。
ただし,1Password SSH エージェントが動作できるように,OpenSSH Authentication Agentサービスの確認,設定をします。
-
Win + r
を押す -
services.msc
と入力して[OK] - 「OpenSSH」を探し,スタートアップの種類が「無効」になっていることを確認
- 無効になっていなければ,ダブルクリックして設定を開き「無効」に設定。
2. SSH鍵ペアを作成する
1Passwordのアプリを開き,[+新規アイテム]
→[SSHキー]
を選択。
[+秘密鍵を追加]
から既存の鍵,または新しい鍵を登録。
デフォルトでは,SSHエージェントはPrivate Vault内の鍵のみを認識します。そのため,ほかのVaultにある鍵を使用する際は,後述する設定ファイルagent.toml
に別途設定を記述する必要があります。
以下のコマンドで,SSH エージェントが認識している鍵を確認できます。
$env:SSH_AUTH_SOCK = "\\.\pipe\openssh-ssh-agent"; ssh-add -l
SSH_AUTH_SOCK="$HOME/Library/Group Containers/2BUA8C4S2C.com.1Password/t/agent.sock" ssh-add -l
PS C:\Users\koin3z> $env:SSH_AUTH_SOCK = "\\.\pipe\openssh-ssh-agent"; ssh-add -l
...
256 SHA256:A8kvTUp4SsvshwTjLnEECCUwxO++R5NJc3vPo9JUrGY my-sshkey (ED25519)
...
...
3. 接続確認
sshコマンドで接続すると,1Password の認証ポップアップが立ち上がり,認証を通過すると無事接続できます。
補足
・認証における 6 Keys Limit
SSHエージェントは認証に有効な鍵を当てるまで,管理している鍵を1つづつサーバーに提示します。
SSHサーバーでは認証試行回数(MaxAuthTries
)が6回に設定されていることが多いため,SSHエージェントが提示する鍵が多い場合,以下のエラーではねられることがあります。
Received disconnect from xx.xx.xx.xx port 22:2: Too many authentication failures
これを回避するために,.ssh/config
やSSHエージェント設定ファイルを使用し,どのホストに対してどのSSH鍵を使用するかを関連付けます。
.ssh/config
の設定では,公開鍵をダウンロードしローカルに配置した後,IdentityFile
にパスを記載し,以下のような形式にします。
Host XXXXXX
...
IdentityFile <公開鍵のパス>
IdentitiesOnly yes
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
...
また,Private Vault以外に鍵をおいている場合や,管理対象の鍵範囲を指定したい場合,SSHエージェントの設定ファイルagent.toml
を編集します(次節参照)。
・SSHエージェントの設定ファイル
個人のVaultだけでなく,任意のVaultやアカウントの鍵をSSHエージェントに使用させたい場合,SSHエージェントの設定ファイルを編集します。
ファイルは 1Password アプリからも鍵画面から開くことができます。
なお,設定ファイルの位置は以下の通りです。
%LOCALAPPDATA%/1Password/config/ssh/agent.toml
例)C:\Users\<user>\AppData\Local\1Password\config\ssh\agent.toml
1. $XDG_CONFIG_HOME/1Password/ssh/agent.toml
2. ~/.config/1Password/ssh/agent.toml
agent.toml
ファイルはTOML構文にて,[[ssh-keys]]
ヘッダーと,その他3つの項目のうち1つ以上の設定が必要になります。
[[ssh-keys]]
item = "<アイテム名>"
vault = "<Vault名>"
account = "<アカウント名>"
なにか設定した場合,Private Vault 内の鍵が管理外になることがあるので,最後にはssh-add -l
で対象の鍵が認識されていることを確認しておきます。