告诉git使用哪个SSH配置文件

时间:2016-12-19 09:33:10

标签: git ssh ssh-keys

我有各种系统的多个ssh配置文件夹,例如:

ssh -F ~/.ssh/system-a/config user@system-a
ssh -F ~/.ssh/system-b/config user@system-b

每个文件夹都有一个配置文件和一组身份文件,如此

Host system-a
    HostName <some_hostname>
    User <some_username>
    IdentityFile ~/.ssh/system-a/keys/system-a.pem

在执行git任务时如何告诉git使用某个ssh配置文件或某个ssh密钥?

理想情况下,如果可以,我希望每个git项目都这样做。

3 个答案:

答案 0 :(得分:8)

在命令行上,您可以更改当前存储库的Git配置:

git config core.sshCommand "ssh -F ~/.ssh/system-a/config"

或本地存储库中的.git/config[core]部分:

sshCommand = "ssh -F ~/.ssh/system-a/config"

这仅适用于git 2.10及更高版本。否则,需要使用环境变量$GIT_SSH_COMMAND进行设置,例如:

GIT_SSH_COMMAND="ssh -F ~/.ssh/system-a/config" git pull

答案 1 :(得分:1)

正如Andrejs Cainikovs和​​Jakuje指出的那样,可以使用多个ssh-config文件,其中最近有git个。

但是,使用具有多个配置的单个ssh-config文件,您可以实现几乎相同的结果,可能所有引用单个真实主机:

Host SOMELABEL
    HostName <some_hostname>
    User <some_username>
    IdentityFile ~/.ssh/system-a/keys/system-a.pem

Host OTHERLABEL
    HostName <other_hostname>
    User <other_username>
    IdentityFile ~/.ssh/system-b/keys/system-a.pem

然后克隆repos,如:

  git clone SOMELABEL:foo/bar.git
  git clone OTHERLABEL:frobnozzel.git

对于 <some_username>@<some_hostname> 存储库,这将~/.ssh/system-a/keys/system-a.pembar中的ssh-key一起使用,而对于ssh,它将使用<other_username>@<other_hostname> -~/.ssh/system-b/keys/system-a.pem中的 frobnozzel 存储库的密钥。

答案 2 :(得分:1)

git 2.10 +

检查Jakuje answer

git 2.9 -

使用core.gitproxy指向实现魔法的自定义脚本。