使用 1Password 优雅管理多个 SSH Key
在日常工作生活中,大家不可避免地会在一台电脑上使用到不同的 GitHub 账号,不同账号管理着不同仓库的权限,常见的是工作上一个,自己 side project 一个。每个账号会用到不同的 SSH Key,一般大家都是把 SSH Key 放在本地,平时还好,感觉不到什么。但一旦需要迁移电脑的话,又要配置迁移这些 SSH Key,既熟悉又有些陌生,要花时间回忆整理,比较头疼。这里介绍一种利用 1Password 管理多个 SSH Key 的方法。
创建 SSH Key
1Password 是一个功能强大的密码管理器,它不仅支持保存各种网站的账号密码,还可以用来创建保存 SSH Key。为什么不保存在本地呢,这样做的优点之一是当迁移电脑的时候,只需要在新电脑上登录 1Password,SSH Key 自动就可以同步到新电脑,不再需要手动管理。下面来看看如何用 1Password 创建 SSH Key:
当你安装好 1Password 相关客户端后,来到 GitHub 添加 SSH Key 的页面,会出现一个 “Create SSH Key” 的 1Password 提示,点击保存就好。
配置 SSH agent
首先,需要打开 1Password SSH agent 才能在 1Password 中使用 SSH Key。
接下来需要去编辑 ~/.config/1Password/ssh/agent.toml
文件,如果你新添加的 SSH Key 保存在新的 1Password Vault 中,你需要把它添加进去,这样 1Password 才能访问得到。
# This is the 1Password SSH agent config file, which allows you to customize the
# behavior of the SSH agent running on this machine.
#
# You can use it to:
# * Enable keys from other vaults than the Private vault
# * Control the order in which keys are offered to SSH servers
#
# EXAMPLE
#
# By default, all keys in your Private vault(s) are enabled:
#
# [[ssh-keys]]
# vault = "Private"
#
# You can enable more keys by adding more `[[ssh-keys]]` entries.
# For example, to first enable item "My SSH Key" from "My Custom Vault":
#
# [[ssh-keys]]
# item = "My SSH Key"
# vault = "My Custom Vault"
#
# [[ssh-keys]]
# vault = "Private"
#
# You can test the result by running:
#
# SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock ssh-add -l
#
# More examples can be found here:
# https://developer.1password.com/docs/ssh/agent/config
[[ssh-keys]]
vault = "work"
[[ssh-keys]]
vault = "personal"
因为我们有多个 SSH Key,为了保证能调用到正确的 SSH Key,还需要去配置位于 ~/.ssh/config
的 SSH agent 配置文件。
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
# work
Host gh-work
HostName github.com
User git
IdentityFile ~/.ssh/gh-work.pub
IdentitiesOnly yes
# personal
Host gh-personal
HostName github.com
User git
IdentityFile ~/.ssh/gh-personal.pub
IdentitiesOnly yes
上面声明了两个 Host:gh-work
和 gh-personal
,它们的 .pub
文件来自 1Password 对应保存的公钥文件,去 1Password 上下载就好。
配置 Git
编辑位于 ~/.gitconfig
的 Git 全局配置文件如下:
[gpg]
format = ssh
[gpg "ssh"]
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
[commit]
gpgsign = true
[includeIf "gitdir:~/"]
path = ~/.gitconfig-personal
[includeIf "gitdir:~/Documents/work/"]
path = ~/.gitconfig-work
另外我也创建了另外的两个 .gitconfig-personal
和 .gitconfig-work
配置,其中 .gitconfig-personal
配置内容如下:
[user]
name = Wang Lao
email = [email protected]
上面的配置结合起来看,我声明了当前用户文件夹下默认用 .gitconfig-personal
配置,如果是位于 ~/Documents/work/
下的仓库,就会用 .gitconfig-work
配置,然后就可以在不同的 git 配置中应用不同的设置,这样就达到了根据目录位置区分的目的。
更新本地仓库
最后,需要去更新本地仓库 的 origin,来保证它和我们前面设置的 Host 是相互匹配的:
git remote set-url origin <host>:<organization>/<repository>.git
一切配置妥当后,运行 git fetch
来确认 1Password 是否使用了正确的 SSH Key 进行身份验证,你应该会看到下面的 1Password 弹窗。
现在,我们就配置完成啦,SSH Key 保存在 1Password 上,每次迁移电脑的时候,就不必迁移 SSH Key 了。但在配置的过程中我们也产生了系列的 dotfile,这些 dotfile 的管理也是一项负担,后面我会分享我是如何管理这些 dotfile 的,先按下不表。
如何获取 1Password
1Password 好用是好用,但它是一款付费软件,有时又不想花钱,那该怎么办呢?
这里,我分享低价甚至免费的两种渠道来获取 1Password,第一种 TG 上有合租 1Password 家庭账号的频道,可以花小钱上车,第二种是 1Password 对符合要求的开源项目提供团队账号的免费赞助,这里是申请链接 https://github.com/1Password/for-open-source,大家合规申请使用。