原文作者:@玄冬Wong
git使用中,多个ssh key对应同一个host(主机)时,用不同ssh key(或者说多个用户)进行clone和push的问题。以下操作都是git命令行执行,只要执行正确,TortoiseGit客户端也就自动配置好了。
步骤
1,假设已经生成了两个private key:key-one和key-two(如何生成key:http://aigo.iteye.com/blog/2266163),
然后编辑~/.ssh/config文件,如果没有则新建一个。windows下config文件位置在:C:\Users\当前用户名\.ssh目录下
Host account-one HostName server.example.com Port 22 User user-one IdentityFile ~/.ssh/key-one Host account-two HostName server.example.com Port 22 User user-two IdentityFile ~/.ssh/key-two
.ssh/config参数解释:
Host:远程服务器别名;
HostName:远程服务器地址;
Port:端口,不填则默认是22
User:ssh key对应的用户名(生成ssh key时填写过的)
IdentityFile:ssh key的私钥
2,在客户端上执行git命令:其中repository为远程仓库名名称。
注意:
执行此命令时必须将git-bash当前目录切换到你的本地git仓库,如果你有多个本地git仓库且这些仓库都需要多个用户,那么你得在每个本地仓库下执行下这个命令。
$ git remote add one account-one:repository.git $ git remote add two account-two:repository.git
这个one和two是当前仓库的remote,执行完后可以通过TortoiseGit查看(以下截图是我机器上的,所有和上面命令不是一致的,下图中的res_remote相当于上面 的one和two,alias-resource-dev:Resource.git相当于account-one:repository.git):
3,使用git进行clone和push:
$ git clone one:repositoyr.git master $ git clone two:repositoyr.git master
$ git push one master $ git push two master
如果是用TortoiseGit操作,那么可以选择是哪个remote(以下截图是我机器上的,所有和上面命令不是一致的):
其他事项:
1,key文件路径问题
如果ssh key的位置不是在默认目录下,比如在windows上的D:\test目录下,那么config中配置的路径是这样的(这里的IdentityFile路径名千万不能错误,否则还是始终提示你输入密码,我因为少些了一个字母,查了很长时间。。。如果是在其他机器上配置,记得HostName不要写成127.0.0.1):
Host account-one
HostName server.example.com
User user-one
IdentityFile /d/test/key-one
如果是在默认目录下(“C:\Users\用户名”),也可以使用unix语法格式的路径:
IdentityFile ~/.ssh/id_rsa
最后给一个我本地的配置例子。
因为我git服务器使用的gitblit,默认对ssh端口设置的不是22,所以我配置了Port参数
Host alias-program-cli HostName 127.0.0.1 Port 29418 User user001 IdentityFile /C/Users/Administrator/.ssh/id_rsa Host alias-resouce-dev HostName 127.0.0.1 Port 29418 User res_dev IdentityFile /C/Users/Administrator/.ssh/res_dev_rsa2,配置用户名的问题
使用git config user.name和git config user.email配置第二个用户名之后,即使后面push时使用的是第一个用户名,git仓库的提交里面显示的是第二个用户名。所以生成完第二个key以后,记得把user.name还原到自己的默认用户名。这种情况说明一个问题,当用ssh连接服务器时,用户名只是一个别称了,真正起到验证作用的是key
部分参考自:
Switching between multiple ssh keys in Git on Windows
http://stackoverflow.com/questions/9672975/switching-between-multiple-ssh-keys-in-git-on-windows