Git multiple coexist

解决多个 Git 账户共存问题

Git 的管理工具要求每个 Git User 需要生成一对密钥,公钥和私钥。然后把公/私钥放置于:

//私钥
用户/.ssh/id_rsa
//公钥
用户/.ssh/id_rsa.pub

并且将公钥注册于基于 Git 的代码托管库,类似Github。
当用户用 Git 来管理项目的时候,就是通过生成的公钥和私钥来认证用户的合法性

默认情况下,多个 Git 账户无法在一台机器上协调工作。但通过配置也是可以解决共存问题。有以下两种方式:

  • 在 ssh config 文件中定义 Host
  • 使用 ssh-add

在 ssh config 文件中定义 Host

用户/.ssh 创建 config 文件。(如果有就修改,没有则创建)

写入对每个 Git 账户使用独自的 ssh 密钥的配置:

.ssh/config 注释说明

Host 别名
HostName  域名或 ip
User 登陆服务器用的账号
Port 端口号(默认22,可以不填,如果服务器修改了 ssh 登录端口号,此处需要修改)
IdentityFile 密钥文件的位置

配置.ssh/config

# account for the home repo
Host home.github.com
    HostName github.com
    User inadarei
    IdentitiesOnly yes
    IdentityFile ~/.ssh/id_rsa_home

# account for the work repo
Host work.github.com
    HostName github.com
    User inadarei
    IdentitiesOnly yes
    IdentityFile ~/.ssh/id_rsa_work

这样不同的 Git 账户会使用不同的密钥,但前提是这些密钥都已经按照 config 文件中的配置要求正确放置和命名。

配置git仓库

git remote add origin git@work.github.com

需要把 Git 的配置更改过来,其中 github.com 更换为 work.github.com,这样它会找到对应的 key 来登录。

使用 ssh-add

# start the ssh-agent in the background // 在后台启动 ssh-agent
ssh-agent -s // 这个命令好像有问题,启动不了
# Agent pid 59566
ssh-add ~/.ssh/id_rsa // 添加私钥

可能会遇到的问题

以下是使用 Git Bash 执行

$ ssh-keygen -t rsa -C 'yourname@mail.com' -f id_rsa_yourname
// 生成新的 SSH key:id_rsa_yourname

$ ssh -T git@github.com
Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of known hosts.
Permission denied (publickey).
// 连接出错,提示没有权限
// 其实是因为 ssh-add 没有添加成功,或者是 config 没有正确配置

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-7DLTiXwwx9cI/agent.13188; export SSH_AUTH_SOCK;
SSH_AGENT_PID=12892; export SSH_AGENT_PID;
echo Agent pid 12892;
// 这里是输出 ssh-agent 的配置环境

$ eval $(ssh-agent)
Agent pid 13284
// windows 下用这个命令去启动 ssh-agent

$ ssh-add ~/.ssh/id_rsa_example_2
Identity added: /d/Users/test/.ssh/id_rsa_example_2 (/d/Users/test/.ssh/id_rsa_example_2)
// 将密钥添加到 ssh-agent

$ ssh-add ~/.ssh/id_rsa_example_2
Could not open a connection to your authentication agent
// 在shell下执行 $ ssh-agent bash --login -i
// 然后执行 $ ssh-add 就好了。

参考

Using Multiple SSH Keys with Github

配置多个git远程仓库的ssh-Key切换

多个平台git共存

搭建通过 ssh 访问的 Git 服务器

git生成ssh key及本地解决多个ssh key的问题