【问题标题】:Why git fetch is not using the same keys as ssh -T?为什么 git fetch 不使用与 ssh -T 相同的键?
【发布时间】:2021-09-15 14:46:29
【问题描述】:

我正在使用 Windows 10,我正在尝试通过 ssh 将 git 与 gitlab 的 selfhosted(corporate) 实例连接起来。 我尝试按照这里的指南https://docs.gitlab.com/ee/ssh/。我正处于ssh -Tv git@corpo.gitlab 正确将我登录到实例的阶段,但是当我尝试执行git fetch gitlab 时,ssh 连接失败。

我尝试比较独立 ssh 调用和 git 调用 ssh 的调试输出,我发现在“git”变体中,甚至没有尝试使用我的私钥。日志说它在正确的用户目录中查找(因此它不是“用户范围”问题)。

为什么会发生这种情况?我已通过git remote gitlab git@corp.gitlab 将远程添加到 git 存储库。

设置正确的 ssh config 文件

 Host ssh.corpo.gitlab
     HostName ssh.corpo.gitlab
     IdentityFile ~/.ssh/my_corpo_key

解决了这个问题,但我认为它应该在没有这些额外设置的情况下工作。有什么不同?

【问题讨论】:

  • Windows 带有自己的ssh,而Git-for-Windows 带有 自己的ssh。这两个实现可能无法正确地相互通信。你可以让 Git 使用 Windows ssh,虽然我不知道这样做的正确方法是什么。
  • 你说得非常正确,我刚刚检查了 windows 使用 OpenSSH_for_Windows8 + LibreSSL 而 git 调用 OpenSSH8 + Openssl。正在使用不同的二进制文件,因此我只在“windows”实例中添加了“default”键。这实际上解释了(回答)我的问题。
  • @torek set GIT_SSH,例如
  • @phd 这与设置GIT_SSH_COMMANDcore.sshCommand 相比如何? (特别是,Windows 用户和/或生态系统是否有自己的用于特殊目的的环境变量覆盖?)
  • @torek GIT_SSH 必须指向二进制文件(或脚本)并且不接受参数。 GIT_SSH_COMMAND 允许复杂的命令行。我不认为 Git-for-Windows 有自己的环境变量。

标签: git ssh


【解决方案1】:

我已通过 git remote gitlab git@corp.gitlab 将远程添加到 git 存储库。

如果你想使用你的密钥,你需要一个~/.ssh/config 和:

Host corpo.gitlab
  Hostname ssh.corpo.gitlab
  IdentityFile ~/.ssh/my_corpo_key
  User git

URL 会变成:

git remote set-url gitlab corpo.gitlab:<me>/<myrepo>
                          ^^^^^^^^^^^^
                   (need to match the Host entry)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2014-09-08
    • 2015-08-15
    • 2018-11-23
    • 2018-05-19
    • 2012-08-05
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多