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



我有多个用于各种系统的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 项目执行此操作。

在命令行上,您可以更改当前存储库的 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

正如Andrejs Cainikovs和Jakuje所指出的,可以使用多个具有足够新git的ssh配置文件。

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

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

然后克隆存储库,如下所示:

git clone SOMELABEL:foo/bar.git
git clone OTHERLABEL:frobnozzel.git
这将<some_username>@<some_hostname>

与 ssh key 一起使用~/.ssh/system-a/keys/system-a.pem用于bar存储库,而它将<other_username>@<other_hostname>与 ssh key 一起使用~/.ssh/system-b/keys/system-a.pem用于frobnozzel存储库。

我想进入这个话题,因为我最近一直在尝试解决这个问题,而不必对我克隆的每个新版本进行git config core.sshCommand

因此,为此,我对Jakuje的实现进行了一些扩展

我有两个 gitlab 帐户。一个是工作,使用我的工作电子邮件,另一个是个人的,使用我的个人电子邮件。

为此,我有两个不同的私钥:

  • 个人:~/.ssh/keys/personal.id_rsa
  • 工作:~/.ssh/keys/work.id_rsa

现在,我有一个位于~/.gitconfig的全局 git 配置和一个位于~/work.gitconfig的替代配置。工作 git 配置仅包含与全局配置不同的设置。

所以在这种情况下,

~/work.gitconfig

[core] 
sshCommand = ssh -i ~/.ssh/keys/work.id_rsa

以及我克隆到~/source/work的所有与工作相关的存储库

然后魔术发生在我的~/.gitconfig.我包括以下部分(gitincludeIf):

[includeIf "gitdir:~/source/work/**"]
path="~/work.gitconfig"

现在,这将告诉git~/source/work中的所有存储库包含我的工作 git 配置。然后,此配置将自动将推送/拉取时使用的 ssh 键设置为我用于工作存储库的密钥。

您需要做的就是克隆到正确的文件夹中。

您可以将其与使用通用 ssh 配置结合使用。

Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/keys/personal.id_rsa

默认情况下,git 将使用personal.id_rsa(个人帐户),除非存储库位于work目录中,则使用工作帐户(基于 ssh 密钥)。

git 2.10+

检查雅库耶的答案。

git 2.9-

使用指向执行魔术的自定义脚本的core.gitproxy

最新更新