多个 Git SSH 密钥在同一 Windows 用户下的正确配置

起因

这个问题是在计划实测 GitHub 的 ForkPull Request 功能时出现的。实战练习至少需要两个 GitHub 帐号——
帐号 A:远程文档库 P 的创建者。
帐号 B:仓库 P 的参与者、合作方。

帐号 B 的操作流程如下:

  1. 从 A 在线叉取P到自己帐号下,记为P1;
  2. 下拉 P1 到本地,并产生新版本 P2;
  3. 同步 P2 到 B 的远程仓库;
  4. 向发起一个归并意向(pull request);

实验进行到第三步时出错,GitBash实测脚本如下(用户信息那行已省略):

$ git clone git@github.com:andong2007/Excel.git Demo
Cloning into 'Demo'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 14 (delta 3), reused 5 (delta 1), pack-reused 0
Receiving objects: 100% (14/14), done.
Resolving deltas: 100% (3/3), done.

$ cd Demo/; echo 'Rem demo comments' >> batchFormatTabels.txt

$ git status -s
 M batchFormatTabels.txt

$ git add -u; git status -s;
warning: LF will be replaced by CRLF in batchFormatTabels.txt.
The file will have its original line endings in your working directory
M  batchFormatTabels.txt

$ git commit -m 'modify a file'
[master 5656244] modify a file
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git push -u origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:andong2007/Excel.git
 ! [remote rejected] master -> master (permission denied)
error: failed to push some refs to 'git@github.com:andong2007/Excel.git'

$

根据最后两句的理解,因为权限问题导致远程同步失败。
当时本机的密钥配置如下:

对比项 \ 密钥密钥A(帐号 A 专用)密钥B(帐号 B 专用)
存放路径私钥:~\.ssh\id_rsa
公钥:~\.ssh\id_rsa.pub
私钥:~\.ssh\id_andong
公钥:~\.ssh\id_andong.pub
创建顺序先创建后创建
下拉时的
调用情况
被调用未被调用

由此可见,问题出在密钥 B 的前后不一致,因为本地按默认的密钥进行了 SSH 校验。具体调用哪个密钥需要手动配置。

解决方法

~\.ssh\下创建配置文件 config,内容如下:

#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

Host github-zad
HostName github.com
User git
IdentityFile ~/.ssh/id_andong

要领:为不同的密钥配置不同的 HostIdentityFile 即可

用法

  1. 启用默认的 密钥A 克隆远程文档库:
$ git clone git@github.com:andong2007/Excel.git
  1. 启用新增的 密钥B 克隆远程文档库:
$ git clone git@github-zad:andong2007/Excel.git

或者直接:

$ git clone github-zad:andong2007/Excel.git

再次实测

andon@Sinosoft-Zhouad MINGW64 ~/Desktop/excelTest
$ git clone github-zad:andong2007/Excel.git Demo
Cloning into 'Demo'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 14 (delta 3), reused 5 (delta 1), pack-reused 0
Receiving objects: 100% (14/14), done.
Resolving deltas: 100% (3/3), done.

# ... 

$ git push -u origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github-zad:andong2007/Excel.git
   4d73186..f2046f9  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

$

参考资料

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安冬的码畜日常

您的鼓励是我持续优质内容的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值