首页 > 解决方案 > 仅在需要身份验证时如何将 git 协议从 https 切换到 ssh

问题描述

我正在使用 YubiKey(带有 USB 的 PIV 智能卡)来存储我的 GitHub 的 ssh 凭据。每次通过 ssh 访问 GitHub 时,我都需要插入 key 并放置 pin。这有点压力,如果不需要,我想避免它。例如,在克隆公共存储库时,我不需要通过 https 进行身份验证。

我可以强制 git 客户端在任何地方使用 ssh:

[url "git@github.com:"]
    insteadOf = https://github.com/

但我不想到处强制执行 ssh。我只在需要身份验证时才需要它。

有没有人知道好的方法?

标签: gitssh

解决方案


Git 没有提供本地执行此操作的方法,如果您想将 HTTPS 用于公共存储库,将 SSH 用于私有存储库,则需要手动完成。

这样做的原因是 Git 本质上并不知道两个不同的存储库 URL 映射到同一个存储库。虽然有一些常见的模式,但适用于 GitHub 的方法不适用于我的个人服务器,因此它不能对操作进行任何假设。因此,您必须明确说明您想要什么。

此外,Git 能够知道远程 HTTPS 服务器需要身份验证的唯一方法是尝试发出请求。所以为了完成你想要的,它必须发出一个 HTTP 请求,意识到它得到了一个 401,中止整个单独的 HTTP 帮助程序,回滚,在内部更改协议,然后产生一个全新的进程来做到这一点。不用说,Git 没有这种支持。

正如其他人所建议的那样,您可以将 SSH URL 用于您的私有存储库,并将 HTTPS URL 用于您的公共存储库,并pushInsteadOf在您~/.gitconfig的 .


推荐阅读