AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 410779
Accepted
mtalexan
mtalexan
Asked: 2017-12-14 17:22:05 +0800 CST2017-12-14 17:22:05 +0800 CST 2017-12-14 17:22:05 +0800 CST

没有 x 会话的 gnome-keyring 用法

  • 772

我的用例是我有一个执行软件开发的无头服务器。我通常为与它的 SSH 连接启用 X11 转发,但对于连接速度较慢的远程位置,我不能。
我需要安全存储和缓存我的 git 凭据,因为我经常在树中使用 18-20 个存储库,所以我使用 git-credential-gnome-keyring 作为 git credential.helper,它使用 libgnome-keyring 进行通信到 gnome-keyring-daemon。为了测试解决方案,我设置了一台带显示器的 PC,确认密钥环在系统上默认工作,然后使用 SSH 进行尝试。它适用于 X11 转发,但没有它就无法工作。

当我在没有 X11 转发的情况下连接时,在查询 keyring 时会出现以下错误,并且该工具会退回到命令行提示:

** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon

调查显示,基本问题是 gnome-keyring-daemon 期望连接使用 dbus 与之对话。如果没有 X11 会话,则 dbus 不会启动,因此 gnome-keyring-daemon 和 libgnome-keyring 没有公共 dbus 总线可以连接。

我找到了其他人针对此问题发布的两种解决方案,尽管它们都不适合我。

  1. 从使用 X11 的现有会话中获取 DBUS 端口
  2. 手动启动新的 DBUS 端口

当附加到现有的 DBUS 端口时,基本概念是找到现有登录会话的 PID,从 procfs 中转储该 PID 的环境,在其中搜索DBUS_SESSION_BUS_ADDRESS,然后将其导出到当前环境中。由于这是用于发布会话中所有内容正在使用的 DBUS 总线的变量,因此设置它应该允许会话中的所有内容在公共 DBUS 总线上进行通信,尽管它是与不同会话相关联的总线。
来源:
https ://ubuntuforums.org/showthread.php?t=1059023

https://ask.fedoraproject.org/en/question/45246/error-communicating-with-gnome-keyring-daemon-in-ssh- session/

添加到我的 .bashrc 的代码在 ssh 登录时执行:

if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    local myPID=`pgrep "(.*session|fluxbox)" | head -n1`
    if [ -n "$myPID" ] ; then
        local myVar=`cat /proc/${myPID}/environ | grep -z "^DBUS_SESSION_BUS_ADDRESS=" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
        if [ -n "$myVar" ] ; then
            export DBUS_SESSION_BUS_ADDRESS=$myVar
        fi
    fi
fi

第二种方法,为会话手动启动 DBUS,涉及使用dbus-launch创建一个新会话并DBUS_SESSION_BUS_ADDRESS为环境设置,然后使用所有必要的服务启动 gnome-keyring-daemon,这样它就会看到我们创建的 DBUS 总线地址而不是一个空的总线地址。此解决方案可能需要也可能不需要将 gnome-keyring-daemon 更改为每个会话运行一个实例,而不是每个系统一个实例,但尚不清楚。
来源:
从数字 8 开始:https://support.wandisco.com/index.php?/Knowledgebase /Article/View/362/17/how-to-setup-encrypted-svn-password-storage-using-gnome- keyring-in-an-ssh-session

如何在升级的情况下修改 dbus 服务的“Exec”行而不丢失更改
添加到我的 .bashrc 的代码在 ssh 登录时执行:

# then DBUS wasn't started for this session and needs to be
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    # start a new dbus session and make sure the variables are exported (automatic output)
    eval `dbus-launch --sh-syntax`

    # make sure gnome-keyring-daemon is using all the necessary components (it may not be by default)
    # Capture the output, which is a series of variable setting commands, one on eachline, and
    # export them while setting them
    while read -r LINE
    do
        export $LINE
    done <<< $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
fi

两种解决方案都给出了相同的失败结果。该进程没有立即产生指示 gnome-keyring-daemon 无法通信的错误,而是挂起一段时间,然后产生以下输出:

Gkr-Message: secret service operation failed: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

** (process:31155): CRITICAL **: Error communicating with gnome-keyring-daemon

我不清楚 gnome-keyring-daemon 如何与 DBUS 交互,但从第二组错误结果中可以清楚地看出它无法通过新创建的 DBUS 总线访问,或者在不同的 DBUS 总线上进行跨进程。我发现的一些内容表明 gnome-keyring-daemon 可能需要在它之前启动 DBUS,但不清楚是使用 (libgnome-keyring) 还是守护程序的情况。

我如何让这个工作?

x11 d-bus
  • 1 1 个回答
  • 3402 Views

1 个回答

  • Voted
  1. Best Answer
    binarym
    2019-06-21T08:30:08+08:002019-06-21T08:30:08+08:00

    这可能是一个愚蠢的答案……但是,gnome-keyring需要访问 X11 会话,至少要提示您输入主密钥。所以,按设计让它运行是不可能的……不是吗?

    编辑:也许不是那么不可能。看到这个帖子,看起来类似于你的问题:

    • 1

相关问题

  • Arch Linux:在没有窗口管理器的情况下运行 VirtualBox (VM)

  • xrdb 冒号丢失错误

  • 在不改变分辨率的情况下让事情变得更大?[伴侣]

  • SSH X11 转发仅在使用受信任时有效

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve