使用sudo时,使用Git凭证助手与gnome-keyring出现错误

49

我在寻找一种安全地存储凭据并连接到使用SSL的Git服务器的方法。我发现了@james-ward的建议(唯一的修改是我更新了我们的“系统”配置,而不是我们的“全局”配置用于Git (https://dev59.com/4WYr5IYBdhLWcg3wy9KA#14528360)

)

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服务器14.0.4

提前感谢! -Richard O.


很遗憾,git-credential-libsecret(git-credential-gnome-keyring的继任者)在Ubuntu中没有打包。上游Debian问题https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=878599 - Colonel Panic
4个回答

139
除了使用sudo外,注意到在2016年,libgnome-keyring是特定于GNOME的,现在已经被弃用(实际上自2014年1月起)。

2022选项:git-credential-manager

微软提供了一个名为GCM(Git凭证管理器)的跨平台凭证助手,您可以安装(无需构建)和配置:

git-credential-manager-core configure

您需要 Git 2.27+ 才能使用它。


2016选项:git-credential-libsecret

Git 2.11+(2016年第4季度)包含一个使用{{link1:libsecret}} 的全新凭证助手。

请参见{{link2:提交87d1353}} (2016年10月9日)由{{link3:Mantas Mikulėnas(grawity)}}完成。
(由{{link4:Junio C Hamano -- gitster --}}合并于{{link5:提交bfe800c}},2016年10月26日)

一个新的凭证助手已经添加到contrib/credential/,它通过"libsecret"与XDG Secret Service API的实现进行通信。

它使用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年第二季度)澄清:

请查看 commit 0a3a972, commit 64f1e65, commit de2fb99, commit 048b673, commit 5747c80, commit 71201ab, commit 16b305c (2023年5月1日) by Taylor Blau (ttaylorr)
(由Junio C Hamano -- gitster --commit fbbf60a中合并,于2023年5月10日)

contrib/credential:移除“gnome-keyring”凭证助手

共同作者:Jeff King
签署者:Jeff King
签署者:Taylor Blau

libgnome-keyring在2014年已被弃用(改用libsecret),九年多前
使用libgnome-keyring实现的凭据助手自2013年以来只有少量提交,其中没有一个实现或更改任何功能。
在这个领域做了实质性工作的最后一次提交是15f7221("contrib/git-credential-gnome-keyring.c: support really ancient gnome-keyring",2013-09-23,Git v1.8.5-rc0 -- merge),差不多九年前。
这个凭据助手遭受与上一个提交相同的fgets()相关的注入攻击(使用新的“wwwauth[]”特性)。
我们应该删除这个已经被弃用的助手,而不是修补它。

3
尝试使用这个工具,第一次使用似乎很顺利,但在随后的启动中我收到了 **(process:774): CRITICAL **: secret_value_get_text: assertion 'value' failed' 的错误提示,并且它又要求我再次输入我的 GitHub 密码... - José María
18
之后在使用 Git 时,我遇到了 ** (process:18000): CRITICAL **: could not connect to Secret Service: Cannot autolaunch D-Bus without X11 $DISPLAY 的错误提示。 - clankill3r
3
如果您的 git 版本较旧,那么目录 /usr/share/doc/git/contrib/credential/libsecret 将不存在。如果可以更新 git,则在 Ubuntu 上可以使用以下命令:https://unix.stackexchange.com/questions/33617/how-can-i-update-to-a-newer-version-of-git-using-apt-get - Lavamantis
1
关于上述第2点:在Ubuntu 16.04上,按照上述第1点使用apt-get安装libsecret等后,在/usr/share/doc/git/contrib/credential目录中没有libsecret目录: “$ ls /usr/share/doc/git/contrib/credential”结果为“gnome-keyring netrc osxkeychain wincred”。 - sh37211
1
@agent18 有不止一个秘密吗?libsecret 管理一个 <key,value> 映射表:一个新的秘密只是这个映射表中的另一条目。 - VonC
显示剩余35条评论

9
使用sudo命令会以root用户身份运行该命令。这就像是向您的系统管理员请求代替您运行某个命令。root用户并不适合进行任何与开发相关的操作,因此不应该使用git命令作为root用户运行。

一旦您以另一个用户(无论是root或其他用户)的身份运行了一个命令,通常情况下,您的常规用户将无法正常与该用户进行通信(特别是在此找不到您的gnome-keyring-daemon)。

所以,答案是:“不要这样做”。如果您确实需要在特定目录中克隆,请按CodeWizard的回答建议为自己授予该目录的权限。事实上,如果您需要在没有权限的目录中克隆,请问问自己是否正在做错什么:原则上,这不应该发生(我的猜测是:您过去已经过多地使用了sudo命令,这就是您在各处拥有可写权限目录的原因)。


2
感谢您的评论。问自己为什么要使用sudo,这是一种良好的实践方式。 - Richard Oswald

4

有时我需要运行sudo git clone,因为有时我需要克隆的目录需要权限。任何帮助将不胜感激。

你尝试克隆仓库的文件夹是由root创建的,所以你没有写入或在其下创建文件夹的权限,除非你是root(sudo),设置权限(chmodchown),然后你就可以克隆到该文件夹中了。

chmod 755 /path

感谢您的帮助,这很有意义。另一个要求迫使我使用 SSH 密钥而不是 HTTPS,因此我不再需要使用 git-credential-gnome-keyring 了。但我确保创建了专用的 git 帐户,并根据您的帮助给他们访问权限,在某个目录中创建自己的存储库,而无需使用 sudo,它运作得非常好! - Richard Oswald

0
更简单:尝试使用git-credential-oauth,它已经包含在许多Linux发行版中,包括FedoraDebianUbuntu

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

一个Git凭证助手,使用OAuth安全地验证到GitHub、GitLab、BitBucket和其他锻造厂。

第一次推送时,助手将打开一个浏览器窗口进行身份验证。存储生命周期内的后续推送不需要任何交互。

这与您选择的任何存储助手兼容,例如git-credential-cache或git-credential-libsecret(不幸的是未包含在Ubuntu中)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接