要访问或使用远程 Git 存储库,您可以使用SSH或HTTP(S)协议;对于前者,当涉及到私有存储库时,您只需配置 SSH 密钥而无需密码,这样您就可以安全地传输数据,而无需输入用户名和密码。
然而,使用HTTP(S)时,每次连接都会提示您输入用户名和密码(当 Git 需要对特定 URL 上下文进行身份验证时)——Github 用户很清楚这一点。
在本文中,我们将向您展示如何修复 Git 总是要求提供用户凭据才能通过HTTP(S)进行访问的问题。我们将解释防止 Git 在通过HTTP(S)与远程存储库交互时重复提示输入用户名和密码的不同方法。
如何在 Linux 中安装 Git
如果您的系统上没有安装Git软件包,请运行适合您的 Linux 发行版的命令来安装它(必要时使用Sudo命令)。
$ sudo apt install git [在 Debian/Ubuntu 上] # yum install git [在 CentOS/RHEL/Fedora 上] $ sudo zypper install git [在 OpenSuse 上] $ sudo pacman -S git [在 Arch Linux 上]
在远程 URL 中输入 Git 用户名和密码
正如我们之前提到的,通过HTTP(S)克隆远程Git存储库时,每个连接都需要用户名和密码,如图所示。
![](https://www.alaica.com/wp-content/uploads/linux-710.png)
为了防止Git询问您的用户名和密码,您可以在 URL 中输入登录凭据,如下所示。
$ sudo git clone https://用户名:your_password@github.com/username/repo_name.git 或者 $ sudo git clone https://用户名:your_password@github.com/username/repo_name.git local_folder
![](https://www.alaica.com/wp-content/uploads/linux-711.png)
此方法的主要缺点是您的用户名和密码将保存在Shell 历史文件中的命令中。
![](https://www.alaica.com/wp-content/uploads/linux-712.png)
以及本地文件夹下的.git/config文件,存在安全风险。
$ 猫.git/config
![](https://www.alaica.com/wp-content/uploads/linux-713.png)
注意:对于已启用双因素身份验证或正在访问使用SAML单点登录的组织的 Github 用户,您必须生成并使用个人访问令牌,而不是输入HTTPS Git的密码(如示例输出中所示)在本指南中)。要生成个人访问令牌,请在Github中转至设置 => 开发人员设置 => 个人访问令牌。
将远程 Git 存储库用户名和密码保存在磁盘上
第二种方法是使用 Git 凭据帮助程序将您的用户名和密码保存在磁盘上的纯文件中,如图所示。
$ git config credential.helper 存储 或者 $ git config --global credential.helper store
从现在开始,当第一次访问时,Git会将凭据写入每个 URL 上下文的~/.git-credentials文件。要查看该文件的内容,可以使用cat 命令,如图所示。
$ cat ~/.git-credentials
![](https://www.alaica.com/wp-content/uploads/linux-714.png)
对于同一 URL 上下文的后续命令,Git 将从上述文件中读取您的用户凭据。
就像之前的方法一样,这种将用户凭据传递给Git 的方法也是不安全的,因为存储文件未加密并且仅受标准文件系统权限的保护。
下面解释的第三种方法被认为更安全。
在内存中缓存远程 Git 存储库用户名和密码
最后但并非最不重要的一点是,您还可以使用Git凭据帮助程序将凭据暂时保存在内存中一段时间。为此,请发出以下命令。
$ git config credential.helper 缓存 或者 $ git config --global credential.helper 缓存
运行上述命令后,当您第一次尝试访问远程私有存储库时,Git 会询问您的用户名和密码并将其保存在内存中一段时间。
![](https://www.alaica.com/wp-content/uploads/linux-715.png)
默认缓存时间为900秒(或15 分钟),之后 Git 会提示您再次输入用户名和密码。您可以按如下方式更改它(1800 秒 = 30 分钟或 3600 秒 = 1 小时)。
$ git config --global credential.helper 'cache --timeout=18000' 或者 $ git config --global credential.helper 'cache --timeout=36000'
有关Git和凭证帮助程序的更多信息,请参阅他们的手册页。
$ 人 git $ man git-credential-cache $ man git-credential-store
本指南有帮助吗?通过下面的反馈表让我们知道。您也可以分享有关此主题的任何问题或想法。