`
aigo
  • 浏览: 2537827 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[git]多个ssh口令访问同一个服务器时,用不同口令进行clone和push的问题

git 
阅读更多

原文作者:@玄冬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_rsa
 
2,配置用户名的问题
使用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

 
  • 大小: 94.8 KB
  • 大小: 54 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics