我有各种系统的多个ssh配置文件夹,例如:
ssh -F ~/.ssh/system-a/config user@system-a
ssh -F ~/.ssh/system-b/config user@system-b
Run Code Online (Sandbox Code Playgroud)
每个文件夹都有一个配置文件和一组标识文件,如此
Host system-a
HostName <some_hostname>
User <some_username>
IdentityFile ~/.ssh/system-a/keys/system-a.pem
Run Code Online (Sandbox Code Playgroud)
在执行git任务时如何告诉git使用某个ssh配置文件或某个ssh密钥?
理想情况下,如果可以,我希望每个git项目都这样做.
Rik*_*Rik 16
我想深入探讨这个主题,因为我最近一直在尝试解决这个问题,而不必执行git config core.sshCommand我克隆的每个新版本
因此,为此我对Jakuje的实现进行了一些扩展
我有两个 gitlab 帐户。一种是工作用的,带有我的工作电子邮件,一种是个人用的,带有我的个人电子邮件。
为此,我有两个不同的私钥:
~/.ssh/keys/personal.id_rsa~/.ssh/keys/work.id_rsa现在,我有一个位于 的全局 git 配置~/.gitconfig和位于 的替代配置~/work.gitconfig。工作 git 配置仅包含与全局配置不同的设置。
所以在这个场景中,
〜/工作.gitconfig
[core]
sshCommand = ssh -i ~/.ssh/keys/work.id_rsa
Run Code Online (Sandbox Code Playgroud)
以及我克隆到的所有与工作相关的存储库~/source/work
然后神奇的事情就发生在我的身上~/.gitconfig。我包括以下部分(git includeIf:
[includeIf "gitdir:~/source/work/**"]
path="~/work.gitconfig"
Run Code Online (Sandbox Code Playgroud)
现在,这将告诉我git将我的工作 git 配置包含在~/source/work. 然后,此配置将自动将推送/拉取时使用的 ssh 密钥设置为我用于工作存储库的密钥。
您需要确保的是克隆到正确的文件夹中。
您可以将其与使用通用 ssh 配置结合起来。
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/keys/personal.id_rsa
Run Code Online (Sandbox Code Playgroud)
默认情况下,git 将使用personal.id_rsa(个人帐户),除非存储库位于work目录中,否则使用工作帐户(基于 ssh 密钥)。
Jak*_*uje 10
在命令行上:
git config core.sshCommand "ssh -F ~/.ssh/system-a/config"
Run Code Online (Sandbox Code Playgroud)
或者在.git/config本地存储库中的[core]部分:
sshCommand = "ssh -F ~/.ssh/system-a/config"
Run Code Online (Sandbox Code Playgroud)
这只适用于git 2.10和更新版本.否则,需要使用环境变量进行设置$GIT_SSH_COMMAND.
正如 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
Run Code Online (Sandbox Code Playgroud)
然后像这样克隆 repos:
git clone SOMELABEL:foo/bar.git
git clone OTHERLABEL:frobnozzel.git
Run Code Online (Sandbox Code Playgroud)
这将<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。