我最近切换到将我的存储库同步到GitHub上的https://(由于防火墙问题),它每次都会要求输入密码。

有没有办法缓存凭据,而不是每次git推送时都进行身份验证?


当前回答

截至2021,HTTPS远程有一个安全、用户友好的跨平台解决方案。不再输入密码!不再有SSH密钥!不再有个人访问令牌!

安装GitHub开发的Git凭据管理器(下载)。它支持对GitHub、BitBucket、Azure和GitLab的无密码OAuth认证。这意味着您可以在GitHub和其他平台上启用双因素身份验证,大大提高了帐户的安全性。

推送时,您可以选择身份验证方法:

> git push
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Device code
  3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...

在Linux上,需要一点点设置。以下内容将凭据缓存在内存中20小时,因此您每天最多只能进行一次身份验证。

git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions=--timeout 72000

熟悉gnomekeyring或KWallet的高级用户可能更喜欢将凭证存储更改为libsecret。

外观配置:由于我总是在上面的提示下选择“web浏览器”,所以我设置了gitHubAuthModes首选项来跳过选择。GCM的最新版本包括一个GUI,它为授权流添加了额外的点击,我禁用了它。

git config --global credential.gitHubAuthModes browser
git config --global credential.guiPrompt false

其他回答

应使用身份验证令牌而不是帐户密码。转到GitHub设置/应用程序,然后创建个人访问令牌。令牌的使用方式与密码的使用方式相同。

令牌旨在允许用户不使用帐户密码进行项目工作。仅在执行管理工作时使用密码,如创建新令牌或撤销旧令牌。


与授予用户对GitHub帐户的全部访问权限的令牌或密码不同,可以使用特定于项目的部署密钥来授予对单个项目存储库的访问权限。当您仍然可以使用普通凭据访问其他Git帐户或项目时,可以在以下步骤中将Git项目配置为使用此不同的密钥:

编写一个SSH配置文件,其中包含Host、部署密钥的IdentityFile、UserKnownHostsFile和User(尽管我认为您不需要)。编写一个SSH包装器shell脚本,该脚本实际上是SSH-F/path/to/your/config$*将GIT_SSH=/path/to/your/wapper前置到普通GIT命令前面。这里git remote(原点)必须使用git@github.com:user/project.git格式。

您可以使用凭据助手。

git config --global credential.helper 'cache --timeout=x'

其中x是秒数。

在Ubuntu上使用GitCredentialManager(GCM)在本地缓存凭据,在Ubuntu 20.04和18.04上进行了测试,但应该可以在其他Linux发行版上运行。

设置git凭据管理器:

curl -LO https://raw.githubusercontent.com/GitCredentialManager/git-credential-manager/main/src/linux/Packaging.Linux/install-from-source.sh
sh ./install-from-source.sh
git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"
sudo rm -rf git-credential-manager/
sudo rm install-from-source.sh

转到回购并运行git fetch选择设备代码访问链接并输入输出中提供的代码

我知道这不是一个安全的解决方案,但有时你只需要一个简单的解决方案-而不需要安装任何其他东西。由于helper=store不适合我,我创建了一个虚拟助手:

创建一个脚本并将其放在用户bin文件夹中,此处名为credfake,该脚本将提供您的用户名和密码:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

使其可执行:

chmod u+x /home/mahuser/bin/credfake

然后在git中配置它:

git config --global credential.helper /home/mahuser/bin/credfake

(或不使用--仅限一个回购协议的全局)

和-voilá-git将使用此用户+密码。

我并没有立即意识到我需要先下载助手!我在Atlassian的永久认证Git存储库中找到了credential.helper下载。

报价:

如果您想在OS X上使用带有凭据缓存的Git,请执行以下步骤:

下载二进制git凭证osxkeychain。

运行以下命令以确保二进制文件可执行:

chmod a+x git-credential-osxkeychain

将其放在/usr/local/bin目录中。

运行以下命令:

git config --global credential.helper osxkeychain