本文提供者陈云峰,欢迎分享,但请注明出处。
Git多账号多SSH密钥配置指南
问题背景
GitHub通过SSH协议与客户端建立安全连接。对于单一用户,生成一对SSH密钥后,将公钥上传至GitHub,每次连接时,SSH客户端会自动使用本地存储的私钥(默认路径为~/.ssh/id_rsa)进行身份验证。这种情况下,服务器上的公钥与客户端的私钥是匹配的,因此能够顺利通过验证。
然而,在多用户场景下(如user1和user2),当尝试连接user2的账户时,尽管user2已在GitHub上保存了自己的公钥,但SSH客户端仍然默认发送user1的私钥,导致验证失败。为了支持多账号下的SSH密钥切换,可以通过配置客户端来解决这一问题。
解决方案
生成和配置新的SSH密钥
首先,打开终端并切换到~/.ssh目录:
cd ~/.ssh
接着,生成一个新的SSH密钥,例如命名为id_rsa_user2:
ssh-keygen -t rsa -C 'user2@mail.com'
生成后,将新生成的SSH公钥添加到GitHub账户的SSH密钥设置中。由于默认SSH仅读取id_rsa,为了使SSH识别新的私钥,需要将其添加到SSH代理中:
ssh-add ~/.ssh/id_rsa_user2
若遇到错误提示“Could not open a connection to your authentication agent”,请先运行eval `ssh-agent -s`
启动SSH代理,再执行上述命令。
编辑SSH配置文件
完成上述步骤后,在~/.ssh目录下创建或编辑config文件,以配置不同私钥对应的服务器。示例配置如下:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-user2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_user2
这里的Host名称可以自定义,便于记忆和区分,同时在后续添加远程仓库时也会用到。
更新Git项目的远程地址
配置完成后,对于非默认账户的GitHub仓库,需要更新其远程地址以指向正确的Host。例如,若要添加user2账户下的test仓库,应使用如下命令:
git remote add test git@github-user2:user2/test.git
而非原来的git@github.com:user2/test.git
。这样,每次连接都将使用id_rsa_user2与服务器进行通信。
调整Git提交者的邮箱
重要提示:GitHub根据配置文件中的user.email属性来确定提交者的身份信息。因此,在多账号环境中,务必根据当前使用的账户更改user.email。可以通过全局设置或针对特定项目进行设置:
全局设置:
git config --global user.email "user2@mail.com"
项目特定设置:
cd test
git config user.email "user2@mail.com"
参考资料
本文提供者陈云峰,欢迎分享,但请注明出处。