I have the following use case: I would like to be able to push to git@git.company.com:gitolite-admin using the private key of user gitolite-admin, while I want to push to git@git.company.com:some_repo using 'my own' private key. AFAIK, I can't solve this using ~/.ssh/config, because the user name and server name are identical in both cases. As I mostly use my own private key, I have that defined in ~/.ssh/config for git@git.company.com. Does anyone know of a way to override the key that is used for a single git invocation?
(另外:gitolite根据键来区分谁在进行推送,所以就访问、所有权和审计而言,user@server字符串对于不同的用户是相同的,这不是问题。)
我已经在github上测试了以下方法,基于阅读其他答案,它结合了一些技巧:
正确的SSH配置
git URL重写
这种方法的优点是,一旦设置好,它不需要任何额外的工作来使它正确-例如,您不需要更改远程URL或记住以不同的方式克隆东西- URL重写使它全部工作。
~ / . ssh /配置
# Personal GitHub
Host github.com
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/github_id_rsa
# Work GitHub
Host github-work
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/work_github_id_rsa
Host *
IdentitiesOnly yes
~ / . gitconfig
[user]
name = My Name
email = personal@personal.email
[includeIf "gitdir:~/dev/work/"]
path = ~/dev/work/.gitconfig
[url "github-work:work-github-org/"]
insteadOf = git@github.com:work-github-org/
~ / dev /工作/ gitconfig。
[user]
email = work@work.email
只要你把所有的工作reppos放在~/dev/work和其他地方的个人物品下,git在向服务器进行拉/克隆/推操作时将使用正确的SSH密钥,并且它还将为你的所有提交附加正确的电子邮件地址。
引用:
1
2
我在Win7上使用Git Bash。下面的方法对我很有效。
在~/处创建一个配置文件。Ssh /config或c:/users/[your_user_name]/. Ssh /config。在文件中输入:
Host your_host.com
IdentityFile [absolute_path_to_your_.ssh]\id_rsa
我想主机必须是一个URL,而不仅仅是一个“名称”或参考您的主机。例如,
Host github.com
IdentityFile c:/users/[user_name]/.ssh/id_rsa
也可以写入“/c/users/[user_name]/....”格式
Giordano Scalzo提供的解决方案也很棒。
https://stackoverflow.com/a/9149518/1738546
注意:有一种方法可以在之前的回答中应用目录的git配置,而不仅仅是在回购级别。
在我的例子中,所有的项目都在~/work/目录下,所以我更新了我的gitconfig如下:
# ~/.gitconfig
...
[includeIf "gitdir:~/work/**"]
path = "~/work/.gitconfig"
# ~/work/.gitconfig
[user]
email = amr@work.com
name = Amr Awad
sshCommand = ssh -i ~/.ssh/work
现在~/work/目录下的所有回购操作都使用工作键~/。Ssh /work,不需要分别配置每个repo。
即使用户和主机是相同的,在~/.ssh/config中仍然可以区分它们。例如,如果你的配置是这样的:
Host gitolite-as-alice
HostName git.company.com
User git
IdentityFile /home/whoever/.ssh/id_rsa.alice
IdentitiesOnly yes
Host gitolite-as-bob
HostName git.company.com
User git
IdentityFile /home/whoever/.ssh/id_dsa.bob
IdentitiesOnly yes
然后在URL中使用gitolite-as-alice和gitolite-as-bob代替主机名:
git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git
Note
您希望包括IdentitiesOnly yes选项,以防止使用默认id。否则,如果您也有与默认名称匹配的id文件,它们将首先被尝试,因为与其他配置选项(遵守“first in wins”)不同,IdentityFile选项附加到要尝试的身份列表中。参见:https://serverfault.com/questions/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807 # 450807