将Git凭证助手与gnome-keyring一起用作Sudo时出错

Ric*_*ald 22 linux git ubuntu gnome-keyring-daemon

我正在寻找一种方法来安全地存储凭证,同时连接到使用SSL的Git服务器.我在@james-ward中遇到了这个建议(我编辑的只是我更新了我们的"系统"配置,而不是Git的"全局"配置(/sf/answers/1016985231/)

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
Run Code Online (Sandbox Code Playgroud)

然后我就可以跑了

git clone https://ipaddress/git/repo.git
Run Code Online (Sandbox Code Playgroud)

并且凭证助手将存储我的凭据,但是当我运行以下内容时:

sudo git clone https://ipaddress/git/repo.git testfolder
Run Code Online (Sandbox Code Playgroud)

它给我以下错误

** (process:3713): CRITICAL **: Error communicating with gnome-keyring-daemon
Run Code Online (Sandbox Code Playgroud)

我有时需要运行sudo git clone,因为有时我需要创建克隆的目录需要它.任何帮助,将不胜感激.

我正在使用的版本: - git版本1.9.1 - Ubuntu Server 14.0.4

先感谢您!-Richard O.

Von*_*onC 72

除了使用sudo之外,请注意,在2016年,libgnome-keyring特定于GNOME,现在已弃用(实际上20141月起).

Git 2.11 +(2016年第4季度)将包括一个新的凭证助手使用libsecret.

提交87d1353通过(2016年10月9日)曼塔斯Mikulėnas( )grawity.
(由Junio C gitsterHamano合并- -bfe800c承诺中,2016年10月26日)

通过" libsecret "与XDG特勤服务API的实现进行对话的新凭证助手已被添加到contrib/credential/.

它用于libsecret支持XDG Secret Service API的其他实现.

  1. 您可以使用以下命令安装libsecret和开发库:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. 然后,您需要构建凭据管理器

    cd /usr/share/doc/git/contrib/credential/libsecret(如果未自动安装,请从源中复制凭证/ libsecret文件夹)

    sudo make

  3. 最后,你应该将git指向配置中新创建的文件:

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


正如mati865评论中指出的那样:

值得注意的是,像Arch和Fedora这样的一些发行版提供了二进制和源代码的帮助程序.

  • Arch上的Libsecret二进制文件:/usr/lib/git-core/git-credential-libsecret
  • Fedora上的Libsecret二进制文件:/usr/libexec/git-core/git-credential-libsecret.

  • 在此之后使用git时我得到`**(进程:18000):CRITICAL**:无法连接到特勤局:无法在没有X11 $ DISPLAY的情况下自动启动D-Bus (7认同)
  • 尝试使用它,第一次似乎工作正常,但在相应的靴子我得到`**(进程:774):CRITICAL**:secret_value_get_text:断言'值'失败'`它再次要求我输入我的github密码. .. (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,得到 (2认同)

Mat*_*Moy 9

使用sudoroot 身份运行该命令。这就像要求您的系统管理员(如果有的话)为您运行命令。该root用户打算执行任何与开发相关的操作,因此git打算以 root 身份使用。

一旦您以另一个用户(root 或任何其他用户)身份运行命令,预计该其他用户将无法与您常用的用户正常通信(特别是,它在这里找不到您的 gnome-keyring-daemon)。

所以,答案是:“不要这样做”。如果您确实需要在特定目录中克隆,请按照 CodeWizard 的答案中的建议授予自己该目录的权限。实际上,如果您需要克隆到没有权限的目录中,请问问自己是否做错了什么:原则上,这种情况不应该发生(我的猜测是:您过去已经使用了sudo太多的内容,而这这就是为什么你到处都有可写目录的原因)。

  • 感谢您的评论。问自己“为什么”使用 sudo 始终是一个很好的习惯。 (2认同)

Cod*_*ard 4

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

您尝试将存储库克隆到的文件夹是由 root 创建的,因此您无权在该文件夹下写入或创建文件夹,除非您是 root ( sudo),设置权限 (chmodchown) 并且您将能够克隆到文件夹。

chmod 755 /path
Run Code Online (Sandbox Code Playgroud)