🔐

1PasswordでのSSH認証情報の管理とコミット署名

2025/02/03に公開

はじめに

1PasswordのSSHキー管理やGitコミット署名などの機能の簡単な紹介です。

基本的にMac向けの記事ですが、ドキュメントを参考にすればWindowsでも同様のことが実現できます。

最近の1Password Developerのドキュメントは結構しっかり書かれているので、詳しくはドキュメントを参考にしてください。

https://developer.1password.com/docs/ssh

準備

1Passwordのインストールを行ってください。

brew install --cask 1password

執筆時点での筆者の1Passwordのバージョンは、8.10.60 です。

SSHキーの管理

何ができるか

SSHの秘密鍵を1Passwordに保管し、サーバーへの接続の際に1PasswordのSSH Agent経由で認証することで、PC上に秘密鍵を保存しなくて良くなります。

大まかに以下の手順で進めます。

  • 1PasswordのSSH Agentを有効化する
  • SSH Agentとして1PasswordのSSH Agentを使用する
  • 1PasswordにSSHキーを保管する
  • ~/.ssh/config の編集

実際にやってみる

今回は例として、GitHubへのSSH接続をやってみます。

1Password側の設定を行う

1Passwordアプリの設定を開き、「SSHエージェントを使用」を有効化してください。

1Passwordの設定画面から開発者のセクション

今回の記事内容では必須ではありませんが、「1Password開発者エクスペリエンスを表示する」と「ディスク上の開発者認証情報をチェックする」も有効化にしておくと良いです。

1つ目のオプションでは、1Passwordのサイドバーメニューに開発者セクションが追加され、1Passwordで利用している開発者関連の機能を管理できます。

2つ目のオプションでは、~/.ssh 配下に秘密鍵を見つけると警告してくれます。

1Passwordの開発者エクスペリエンスの画面

1Passwordの開発者Watchtowerの画面

鍵の作成

何かしらの方法でSSHキーペアを作成して、公開鍵をGitHubに登録してください。

https://github.com/settings/ssh/new

私は基本的には1PasswordのGUI上で作成しますが、GitHubのように対応している場合は、ブラウザ上で1Passwordの拡張機能を使って作成します(作成と保存までをまとめてやってくれるため)。

かなり便利なのでおすすめです。

GitHubにおける1Password拡張機能プロンプト

1Password拡張機能でのSSHキー作成

鍵を1Passwordに保管

上記手順で1Passwordを使って作成した場合はスキップしてください。

新規アイテム -> SSHキー から秘密鍵をインポートしてください。完了したらPC上の秘密鍵は削除しておきましょう。

SSH Configの編集

上記で作成したSSHキーペアのうち、公開鍵~/.ssh/keys/github.pub として保存してください(ここで秘密鍵を置かなくて良いことがポイントです)。

最後に ~/.ssh/config に以下を記載します。

Host github
    HostName github.com
    User git
    IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
    IdentityFile ~/.ssh/keys/github.pub
    IdentitiesOnly yes

特に以下の部分が重要です。

  • IdentityAgent: 1PasswordのSSH Agentを使用する設定
  • IdentityFile: 1Passwordにあるどの秘密鍵を使うか知るために、ペアの公開鍵を指定

接続する

ssh github

とすると以下のようにSSHキーへのアクセスリクエストが出てきます。

GitHubのSSHキーへのアクセスリクエスト

承認して、接続できたら設定完了です。

PTY allocation request failed on channel 0
Hi chrg1001! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

既存のSSHキーを全て移行する

上記のように、1Passwordを使えばSSH秘密鍵をPC上で保管しなくてよくなるため、既存のSSHキーも全て1Password側に寄せてしまうと良いかと思います。

基本的には、以下の手順を全ホストに対して行うだけです。

  • 1Passwordに秘密鍵をインポート(->PC上からは削除)
  • SSH Configを編集

全Hostの設定に IdentityAgent を記載すると冗長なので、私は以下のようにしています。

また、なにかの事情で、一部のHostはデフォルトのSSH Agentが良い場合は、 IdentityAgent ssh-agent とすれば良いです。

Host *
    IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/keys/github.pub
    IdentitiesOnly yes

# 踏み台経由でRDSにポートフォワーディング
Host bastion-rds
    User ec2-user
    ProxyCommand sh -c "aws ssm --profile foo --region ap-northeast-1 start-session --target i-0123456789abcde --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
    LocalForward 3306 foo-db-proxy.proxy-abcdefghijkl.ap-northeast-1.rds.amazonaws.com:3306
    IdentityFile ~/.ssh/keys/foo.pub
    IdentitiesOnly yes

# デフォルトのSSH Agentで接続
Host bar-ssh-agent
    User ...
    IdentityAgent ssh-agent
    IdentityFile ~/.ssh/keys/bar.pem

...

コミットに署名する

Gitのコミット署名にも1Passwordを利用できます。コミットへの署名については以下などを参考にしてください。

https://zenn.dev/yumemi_inc/articles/signing-commit-basics

https://zenn.dev/appare45/articles/github-commit-sign

実際にやってみる

ここでもGitHubにコミット署名鍵を登録&その鍵を1Passwordに保管し、1Passwordを利用してコミット署名してみます。

Gitのバージョンが 2.34 以上であることが必要です。

git --version

鍵の作成

先ほどと同様に以下のページから、公開鍵をGitHub側に登録してください。Key TypeのところをSigning Keyにするのをお忘れなく。

https://github.com/settings/ssh/new

GitHubにSSH Signing Keyを登録

.gitconfig の編集

全リポジトリにおいて、コミットの署名をする想定で設定をします。

作成したSSHキーのアイテムを1Passwordに保管し、そのアイテムの右上メニューから「コミットの署名を設定する...」をクリックしてください。

1PasswordでのGitHub Signing Keyの画面

すると、以下のような画面が出てくるので、「自動的に編集」をクリックするか、コピーして自身で ~/.gitconfig を書き換えてください。

コミット署名の自動設定

以上で設定は完了です。

署名を確認する

どこかのリポジトリで、コミットし、PushしてGitHub上でコミット履歴を確認してください。

以下のように Verified マークがついていれば成功です。

GitHub上でコミット署名を確認

その他

個別のリポジトリに設定する場合や、複数の署名鍵を使い分けるなどの場合は以下のドキュメントを参考にしてください。

https://developer.1password.com/docs/ssh/git-commit-signing#advanced-configuration

最後に

SSH秘密鍵を1Passwordのみで管理し、それをSSH接続やコミット署名に利用する方法を紹介しました。

1Passwordには他にもCLIやShell Pluginsなど便利な機能がたくさんあり、私も普段利用しています(AWSやGitHub CLIの認証情報の管理など)。

またどこかでそのあたりも紹介したいと思います。

mutex Official Tech Blog

Discussion