使用 Git 凭证助手和 gnome-keyring 作为 Sudo 时出错
- 2024-10-17 08:46:00
- admin 原创
- 75
问题描述:
我正在寻找一种在使用 SSL 连接到 Git 服务器时安全地存储凭据的方法。我偶然发现了 @james-ward 的这个建议(我所做的唯一编辑是我更新了我们的“系统”配置,而不是 Git 的“全局”配置(https://stackoverflow.com/a/14528360/6195194)
sudo apt-get install libgnome-keyring-dev
cd /usr/share/doc/git/contrib/credential/gnome-keyring
sudo make
git config --system credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring
然后我可以跑
git clone https://ipaddress/git/repo.git
并且凭证助手将存储我的凭证,但是当我运行以下命令时:
sudo git clone https://ipaddress/git/repo.git testfolder
它给了我以下错误
** (process:3713): CRITICAL **: Error communicating with gnome-keyring-daemon
我有时需要运行 sudo git clone,因为有时我需要克隆的目录需要它。任何帮助都将不胜感激。
我正在使用的版本: - git 版本 1.9.1 - Ubuntu Server 14.0.4
提前谢谢您! -Richard O.
解决方案 1:
除了使用 sudo 之外,请注意,在 2016 年,libgnome-keyring
它是 GNOME 特有的,现在已被弃用(实际上自 2014 年 1 月起)。
2022 年选项:git-credential-manager
微软提供了一个名为GCM(Git Credential Manager)的跨平台凭据助手,您可以安装(无需构建)并配置它:
git-credential-manager-core configure
您需要 Git 2.27+ 才能使用它。
2022 年第四季度:GCM 现在是Git Credential Manager(不再是核心)
git-credential-manager configure
您需要 Git 2.38.1+ 才能使用它。
2016 年选项:git-credential-libsecret
Git 2.11+(2016 年第四季度)包含一个使用的新凭证助手libsecret
。
请参阅Mantas Mikulėnas ()的提交 87d1353(2016 年 10 月 09 日)。 (由Junio C Hamano合并-- --在 提交 bfe800c中,2016 年 10 月 26 日)grawity
gitster
一个 新 的 凭证 助手 , 通过 " libsecret " 与 XDG 秘密 服务 API 的 实现 进行 对话 , 已经 添加 到
contrib/credential/
.它使用
libsecret
可以支持XDG Secret Service API的其他实现。
但到 2022 年,这一要求将不复存在。见上文
正如mati865在评论中指出的那样:
值得注意的是,一些发行版(例如 Arch 和 Fedora)提供了二进制和源代码两种形式的帮助程序。
Arch 上的 Libsecret 二进制文件:
/usr/lib/git-core/git-credential-libsecret
,以及Fedora 上的 Libsecret 二进制文件:
/usr/libexec/git-core/git-credential-libsecret
。
注意:正如@rugk在评论中添加的那样,对于 Fedora 和 Git v2.25.2-1 或更高版本,您需要使用该二进制文件安装一个额外的包,因为它已经从主 git 包中分离出来:
dnf install git-credential-libsecret
Git 2.41 (2023 年第二季度) 澄清:
参见Taylor Blau ()的提交 0a3a972、提交 64f1e65、提交 de2fb99、提交 048b673、提交 5747c80、提交 71201ab、提交 16b305c (2023 年 5 月 1 日) 。(由Junio C Hamano ----于提交 fbbf60a中合并,2023 年 5 月 10 日)ttaylorr
gitster
contrib/credential
:删除“gnome-keyring”凭证助手合著者:Jeff King
签名者:Jeff King
签名者:Taylor Blau
libgnome-keyring 已于 2014 年弃用(取而代之
libsecret
),距今已有 9 年多。自 2013 年以来,使用 libgnome-keyring 实现的凭证助手只有少量提交,但均未实现或更改任何功能。
最后一次在此领域做出实质性工作的提交是15f7221(“
contrib/git-credential-gnome-keyring.c
: support really ancient gnome-keyring”,2013-09-23,Git v1.8.5-rc0 --merge),距今不到九年。此凭证助手遭受与
fgets()
上一次提交相同的相关注入攻击(使用新的“wwwauth[]”功能)。我们不会修补它,而是将此助手删除,因为它已弃用。
解决方案 2:
使用sudo
以 root 身份运行命令。这就像要求您的系统管理员(如果有)为您运行命令一样。root
用户不打算执行任何与开发相关的操作,因此git
不打算以 root 身份使用。
一旦您以另一个用户(root 或任何其他用户)身份运行命令,则预计该其他用户将无法与您的常用用户正常通信(特别是,它在这里找不到您的 gnome-keyring-daemon)。
因此,答案是:“不要这样做”。如果您确实需要在特定目录中进行克隆,请按照 CodeWizard 的答案中的建议授予自己对该目录的权限。实际上,如果您需要在没有权限的目录中进行克隆,请问问自己是否做错了什么:原则上,这不应该发生(我的猜测是:您sudo
过去已经使用了太多,这就是为什么您到处都有可写目录的原因)。
解决方案 3:
我有时需要运行 sudo git clone,因为有时我需要克隆的目录需要它。任何帮助都将不胜感激
您尝试将存储库克隆到的文件夹是由 root 创建的,因此您没有权限写入或在该文件夹下创建文件夹,除非您是 root ( sudo
),设置权限(chmod
或chown
),然后您将能够克隆到该文件夹。
chmod 755 /path
解决方案 4:
更简单:尝试git-credential-oauth,它包含在许多 Linux 发行版中,包括Fedora、Debian和Ubuntu。
不再需要密码!不再需要个人访问令牌!不再需要 SSH 密钥!
Git 凭证助手,使用 OAuth 安全地向 GitHub、GitLab、BitBucket 和其他伪造机构进行身份验证。
首次推送时,助手将打开浏览器窗口进行身份验证。存储有效期内的后续推送无需交互。
这与您选择的任何存储助手兼容,例如 git-credential-cache 或 git-credential-libsecret(不幸的是不包含在 Ubuntu 中)。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件