如何将 core.sshCommand 选项传播到子模块更新?

问题描述 投票:0回答:3

我为存储库设置了

core.sshCommand
选项,以便我在使用它时可以使用不同的 ssh 密钥(即
sshCommand = ssh -i /path/to/key
)。但是,当我运行
git submodule update
时,不考虑此选项:

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

有什么方法可以配置存储库以将给定的 ssh 密钥用于自身和任何子模块吗?

git ssh git-submodules ssh-keys
3个回答
11
投票

全局设置:

git config --global core.sshCommand "ssh -i /path/to/key"

但这为您使用的每个存储库设置了密钥。

或者为每个子模块设置它:

git submodule foreach git config core.sshCommand "ssh -i /path/to/key"

5
投票

根据这个答案,我从那里引用了这段话,

git 2.10.0 中添加了

core.sshCommand
选项。您运行的是 2.7.4,它没有该功能。如果您想使用它,您需要升级到较新的 Git。

如果您运行的是非常旧的版本,请注意更改。您可以查阅此变更日志

您可以使用环境变量

GIT_SSH_COMMAND
来代替。

export GIT_SSH_COMMAND="/usr/bin/ssh -i /your/path/to/id_rsa"

0
投票

这曾经对我有用:

git config --global core.sshCommand "ssh -i /path/to/key"

但是,由于某种奇怪的原因,在 2024 年 9 月左右更新 Windows 后,它突然停止在我的 Windows11 机器上工作(我怀疑这与 OpenSSH 有关)。

甚至命令“ssh -i”也不再正常工作(它根本不添加密钥文件!)

无论如何,我通过调整 .git/config 中的“core.sshCommand”部分解决了所有这些问题,以便让它通过“ssh-add”添加密钥并显式调用 ssh.exe,如下所示:

[core]
    (...)
    sshCommand = ssh-add  ~/.ssh/key.ppk  2>/dev/null   &&    'C:\\Windows\\System32\\OpenSSH\\ssh.exe'

完成此操作后,我的 Windows11 计算机上的一切都恢复正常。只是我的2c。

© www.soinside.com 2019 - 2024. All rights reserved.