无需密码访问 GitHub 私有仓库的多种方法
作为程序员,重复执行相同的任务令人感到厌烦和痛苦,不是吗?
其中一个重复的任务就是与 GitHub 的私有仓库进行交互。你肯定知道我在说什么。你可能正在寻找一个解决方案,并因此发现了这篇文章。读完这篇文章,你就不需要再继续搜索了。
本文将探讨如何无需密码访问 GitHub 私有仓库。我们马上开始吧。
通常,有两种方式可以访问 GitHub 仓库:HTTPS 和 SSH。大多数人使用 HTTPS。但事实上,使用 HTTPS 方法克隆私有仓库并非最优选择。
访问操作包括克隆、推送、拉取等等,所有与远程更新仓库相关的操作。
访问公共仓库时不存在身份验证问题。然而,访问私有仓库时需要进行身份验证。有多种方法可以实现这一点。
让我们从最熟悉的方法开始……
使用 HTTPS 访问
你可能已经了解 HTTPS 方法,并且正在寻找替代方案。我们先快速回顾一下如何使用 HTTPS 访问私有仓库。
- 复制你的私有仓库链接。
GitHub 私有仓库
- 在你的电脑上打开终端或命令提示符。
- 粘贴命令 `git clone [链接]` 以克隆私有仓库。
- 将链接替换为你的私有仓库链接。
- 系统会要求你进行身份验证。你需要输入你的 GitHub 凭据。
- 首先,系统会提示你输入 GitHub 用户名。输入你的 GitHub 用户名,然后按回车键。
- 接下来,需要输入密码。输入你的 GitHub 密码,然后按回车键。
就这样,我们使用 HTTPS 方法成功克隆了私有仓库。现在,你可以更新仓库内容,进行提交,并将更新推送到远程仓库。
你注意到了什么?
它再次要求进行身份验证。
每次与私有仓库交互时都要输入凭据,这难道不是很繁琐吗?
是的,确实如此。
每次与私有仓库交互都需要输入 GitHub 凭据,这非常耗时,并且会降低我们的工作效率。
有多种方法可以解决这个问题。最好的方法之一是使用 SSH。当然,还有其他方法。接下来,我们将逐一探讨这些方法。
.git 配置方法
所有与仓库版本相关的信息都存储在 .git 目录中。这是一个隐藏的文件夹,其中包含一个名为 config 的配置文件,允许我们进行各种设置。但是,通常不推荐直接修改此文件。
可以通过在仓库 URL 中添加用户名和密码来克隆私有仓库,如下所示:
git clone https://<strong>用户名:密码</strong>@github.com/<strong>用户名</strong>/<strong>仓库名称</strong>.git
使用你自己的用户名、密码和仓库名称替换上述占位符。由于我们在 URL 中提供了凭据,系统将不再提示你进行身份验证。
因此,我们可以通过修改仓库配置来实现避免重复身份验证的目标。让我们看一下通过更新 URL 来摆脱重复身份验证的具体步骤。
- 打开克隆的仓库中的 .git 文件夹。
- 你会找到一个名为 config 的文件。使用你喜欢的文本编辑器打开它。
- 你会看到一行包含你的仓库链接,如下所示。
- 通过添加你的用户名和密码来更新 URL,如上所述。
现在,再次更新仓库中的内容,进行提交,然后推送。
你观察到了什么?
这次,系统不应该要求你提供 GitHub 凭据。因此,我们通过更新仓库配置解决了问题。
你可能已经注意到这种方法并不安全,因为它会暴露我们的凭据。此外,如果你的 GitHub 密码包含 @ 字符,此方法将不起作用。
因此,这种方法存在一些严重缺陷。让我们忽略它,继续讨论下一个方法。
凭据助手(credential.helper)
credential.helper 允许我们将凭据永久存储在 ~/.git-credentials 文件中。
当我们第一次输入凭据时,它会将其存储起来。之后,当我们尝试访问私有仓库时,系统将不再提示提供凭据,除非该凭据已存储在 ~/git-credentials 文件中。这是解决问题的一种方法。让我们看看它是如何工作的。
- 首先,我们需要激活该选项,使用命令 `git config credential.helper store` 来存储我们的凭据。
- 激活该选项后,尝试使用用户名和密码访问私有仓库。
- 输入用户名和密码后,系统会将凭据和你的 GitHub 凭据一起存储在 ~/.git-credentials 文件中,如下所示。
现在,按照相同的步骤再次检查它是否有效:更新、提交和推送。如果你按照上述步骤存储了凭据,我相信系统不会再要求你提供凭据。
一切顺利……
如果只想将凭据保存 4 小时而不是永久保存呢?
credential.helper 提供了临时存储凭据一段时间的方法。我们使用缓存而不是存储来临时存储凭据。
默认情况下,缓存会将凭据存储 15 分钟。15 分钟后,git 将再次要求提供凭据。但是,我们可以使用以下命令更改默认时间:
git config credential.helper 'cache --timeout={时间(秒)}'
不要忘记以秒为单位提供时间。让我们看看它是如何工作的。
- 首先,我们需要激活该选项,使用命令 `git config credential.helper cache` 来缓存我们的凭据。
- 使用你的用户名和密码访问私有仓库。
- 输入用户名和密码后,系统会在指定时间内缓存你的 GitHub 凭据。
现在,更新、提交和推送。同样,系统不会要求你提供凭据,因为它已经缓存了这些凭据。
我们已经向你展示了如何使用 git 初始化仓库的命令。可以通过在上述命令中添加 `–global` 标志,全局更新所有项目的 git 配置。
个人访问令牌
个人访问令牌用于授予对 GitHub API 的访问权限。它类似于 OAuth 令牌,可以用于基本的身份验证,替代 git 的密码。因此,我们可以使用个人访问令牌来解决我们的问题。
让我们看看如何操作:
- 登录你的 GitHub 帐户。
- 进入设置。
- 在左侧导航栏中,进入开发者设置。
- 点击个人访问令牌,进入最终目的地。你会看到你的个人访问令牌。
- 点击生成新令牌以生成一个新的令牌。
- 输入令牌的注释。你可以将其视为简短的令牌注释,方便你记忆。
- 选择令牌的权限。使用此令牌的程序将被授予所有选定权限的访问权。在我们的例子中,选择 repo。
- 向下滚动到底部,然后单击生成令牌按钮。
- 系统将只显示一次个人访问令牌,如下所示。你之后将无法再次看到它。因此,请复制它并安全地存储在某个地方,例如使用密码管理器。
- 我们已经成功创建了个人访问令牌。
- 现在,是时候使用它来访问我们的私有仓库了。
- 类似于第一种方法,将 .git/config 文件中的仓库 URL 更新为 `https://{个人访问令牌}@github.com/用户名/仓库名称.git`
现在,尝试访问私有仓库。
系统会要求你进行身份验证吗?
不会,在令牌处于活动状态之前,系统不会要求你进行身份验证。现在,让我们看看最后一种解决问题的方法。
SSH
SSH 用于验证我们的身份。你可以在 GitHub 的文档中找到关于 SSH 的完整信息 这里.
其思路很简单:生成 SSH 密钥,将其添加到 GitHub 帐户,然后你就可以享受无密码身份验证了。
让我们详细看看这三个步骤。
- 在你的系统中打开终端或命令提示符。
- 输入命令 `ssh-keygen -t rsa` 以生成新的 SSH 密钥。
- 系统会要求你提供用于保存密钥的目录。按回车键选择默认目录。当然,你也可以根据自己的喜好更改目录。这里,我们使用默认目录。
- 现在,我们必须输入密码来保护我们的 SSH 密钥。但这是可选的。
- 如果我们为 SSH 密钥选择密码,则每次启动系统时都必须先输入它。
- 如果我们没有选择密码,那么就不需要先输入。
- 再次输入密码以确认。
- 最后,系统会为我们生成一个新的 SSH 密钥,如下所示。
我们已经在我们的系统中成功生成了一个新的 SSH 密钥。它将创建两个文件,如下所示(如果修改了路径,则文件名可能会有所不同)。
现在,是时候连接我们的 GitHub 帐户了。我们需要将扩展名为 .pub 的文件中的内容复制到我们的 GitHub 帐户以进行连接。在我的例子中,它是 `id_rsa.pub`。
- 登录你的 GitHub 帐户。
- 进入设置。
- 点击 SSH 和 GPG 密钥,进入最终目的地。
- 单击“新建 SSH 密钥”以添加我们新生成的 SSH 密钥。
- 你将导航到以下屏幕。
- 为 SSH 密钥添加适当的标题。每个系统的 SSH 密钥都不同。因此,根据它进行选择是个不错的选择。但这不是唯一的选择,你可以根据自己的喜好根据其他事物进行选择。
- 选择标题后,将 .pub 文件中的内容复制并粘贴到第二个字段中。
- 最后,点击“添加 SSH 密钥”,并使用你的 GitHub 密码确认访问。
- 新添加的 SSH 密钥如下所示。
我们已将新生成的 SSH 密钥添加到 GitHub。现在,我们必须对 SSH 连接进行身份验证,以便之后享受无密码身份验证。为此,请在终端或命令提示符中输入以下命令:
ssh -T [email protected]
系统会要求你进行确认。确认即可,我们就完成了。
现在,克隆你的私有仓库。这次系统不会要求进行任何身份验证。
更新、提交和推送。搞定!系统不会再要求你进行身份验证。好好享受吧!
总结
呼!我们已经介绍了无需每次都输入凭据即可访问私有仓库的各种方法。你可以使用任何一种方法。但是,通常的最佳实践是使用 SSH 方法进行身份验证。
当然,这取决于你的喜好。没有规定说必须使用 SSH 方法。不过,大多数企业都使用 SSH 方法进行身份验证,因为它既安全又省时。同时,确保你的凭据安全。
祝你编码愉快!🙂