1PasswordでのSSH認証情報の管理とコミット署名
はじめに
1PasswordのSSHキー管理やGitコミット署名などの機能の簡単な紹介です。
基本的にMac向けの記事ですが、ドキュメントを参考にすればWindowsでも同様のことが実現できます。
最近の1Password Developerのドキュメントは結構しっかり書かれているので、詳しくはドキュメントを参考にしてください。
準備
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開発者エクスペリエンスを表示する」と「ディスク上の開発者認証情報をチェックする」も有効化にしておくと良いです。
1つ目のオプションでは、1Passwordのサイドバーメニューに開発者セクションが追加され、1Passwordで利用している開発者関連の機能を管理できます。
2つ目のオプションでは、~/.ssh
配下に秘密鍵を見つけると警告してくれます。
鍵の作成
何かしらの方法でSSHキーペアを作成して、公開鍵をGitHubに登録してください。
https://github.com/settings/ssh/new
私は基本的には1PasswordのGUI上で作成しますが、GitHubのように対応している場合は、ブラウザ上で1Passwordの拡張機能を使って作成します(作成と保存までをまとめてやってくれるため)。
かなり便利なのでおすすめです。
鍵を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キーへのアクセスリクエストが出てきます。
承認して、接続できたら設定完了です。
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を利用できます。コミットへの署名については以下などを参考にしてください。
実際にやってみる
ここでもGitHubにコミット署名鍵を登録&その鍵を1Passwordに保管し、1Passwordを利用してコミット署名してみます。
Gitのバージョンが 2.34
以上であることが必要です。
git --version
鍵の作成
先ほどと同様に以下のページから、公開鍵をGitHub側に登録してください。Key TypeのところをSigning Keyにするのをお忘れなく。
https://github.com/settings/ssh/new
.gitconfig
の編集
全リポジトリにおいて、コミットの署名をする想定で設定をします。
作成したSSHキーのアイテムを1Passwordに保管し、そのアイテムの右上メニューから「コミットの署名を設定する...」をクリックしてください。
すると、以下のような画面が出てくるので、「自動的に編集」をクリックするか、コピーして自身で ~/.gitconfig
を書き換えてください。
以上で設定は完了です。
署名を確認する
どこかのリポジトリで、コミットし、PushしてGitHub上でコミット履歴を確認してください。
以下のように Verified
マークがついていれば成功です。
その他
個別のリポジトリに設定する場合や、複数の署名鍵を使い分けるなどの場合は以下のドキュメントを参考にしてください。
最後に
SSH秘密鍵を1Passwordのみで管理し、それをSSH接続やコミット署名に利用する方法を紹介しました。
1Passwordには他にもCLIやShell Pluginsなど便利な機能がたくさんあり、私も普段利用しています(AWSやGitHub CLIの認証情報の管理など)。
またどこかでそのあたりも紹介したいと思います。
Discussion