将 git 与 gnome-keyring 和 http(s) repos 一起使用的正确方法是什么?

将 git 与 gnome-keyring 和 http(s) repos 一起使用的正确方法是什么?

目前,每当我git pullgit push进入 http(s) 存储库时,我都会得到以下信息:

$ git pull
Username for 'https://gitrepos.reposdomain.com': [email protected]
Password for 'https://[email protected]@gitrepos.reposdomain.com': 

这对于不频繁使用来说还好,但很快就会变得非常烦人。 不幸的是,在这种情况下,切换到 ssh 不是一个选择。

我读到过早期版本git提供了凭证“存储”和“缓存”,但不建议这样做,因为它以纯文本形式存储密码。

的较新版本git显然将 git 凭证存储在中gnome-keyring,但必须正确设置。

我尝试过按照其他(非 Ubuntu)的答案来让它工作(即这个),但仍然显示用户名和密码提示。

存储 http(s) repos 凭据的正确和最安全的方法是什么git,以及如何使它们在 Ubuntu 上运行?

答案1

git-credential-gnome-keyring现已弃用。

相反,使用秘密。如果您的机器上尚未预安装,请按照以下步骤操作:

  1. 确保libsecret其开发库已安装:

    sudo apt install libsecret-1-0 libsecret-1-dev
    
  2. 然后从 libsecret 开发库附带的源构建凭证助手:

    sudo make --directory=/usr/share/doc/git/contrib/credential/libsecret
    
  3. 最后,将新编译的二进制文件注册为Git 凭证助手

    git config --global credential.helper \
       /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
    

更多详情https://stackoverflow.com/a/40312117/2017781

答案2

您需要设置 gitcredential helper使用 Gnome Keyring:

安装并编译 Gnome Keyring devel:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

并设置凭证:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

答案3

这种简单的方法在我的 Ubuntu 18.04.1 和 git 2.17.1 上似乎就足够了:

git config --global credential.helper cache

您可以像这样指定一小时(= 3600 秒)的超时:

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

进一步阅读精美手册

答案4

尝试git-credential-oauth,可用Ubuntu Lunar 及更高版本

不再需要密码!不再需要个人访问令牌!不再需要 SSH 密钥!

git-credential-oauth 是一个 Git 凭证助手,它使用 OAuth 安全地向 GitHub、GitLab、BitBucket 和 Gerrit 进行身份验证。

首次推送时,助手将打开浏览器窗口进行身份验证。存储有效期内的后续推送无需交互。

安装:

sudo apt-get install git-credential-oauth

配置:

git config --global --unset-all credential.helper
git config --global --add credential.helper "cache --timeout 7200" # two hours
git config --global --add credential.helper oauth

如果您已经安装了它,您还可以使用 git-credential-libsecret 作为 git-credential-cache 的替代存储。

相关内容