использование gnome-keyring без сеанса x

13

Мой пример использования - у меня есть безголовый сервер, на котором выполняется разработка программного обеспечения. Обычно я включаю пересылку X11 для SSH-подключений к нему, но не могу для удаленных мест с медленными подключениями.
Мне нужно безопасное хранение и кэширование для моих учетных данных git, так как я регулярно работаю с 18-20 репозиториями в дереве, поэтому я использую git-credential-gnome-keyring в качестве git credential.helper, который взаимодействует с помощью libgnome-keyring к гному-брелоку-демону. Чтобы протестировать решения, я настроил ПК с монитором, подтвердил, что в системе по умолчанию работает связка ключей, затем попробовал его с SSH. Он работает с пересылкой X11, но не работает без него.

Когда я подключен без переадресации X11, при запросе связки ключей возникает следующая ошибка, и инструмент возвращается к запросу в командной строке:

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

Расследование показывает, что основная проблема заключается в том, что gnome-keyring-daemon ожидает, что соединения будут использовать dbus для связи с ним. Dbus не запускается, если нет сеанса X11, поэтому нет общей шины dbus для подключения к gnome-keyring-daemon и libgnome-keyring.

Я нашел два решения, которые другие опубликовали для этой проблемы, хотя ни одно из них не работает для меня должным образом.

  1. Получить порт DBUS из существующего сеанса, который использует X11
  2. Вручную запустить новый порт DBUS

При подключении к существующему порту DBUS базовая концепция заключается в том, чтобы найти PID существующего сеанса входа в систему, выгрузить среду для этого PID из procfs, найти его 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- Сессия /

Код добавлен в мой .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

Как изменить строку «Exec» службы dbus без потери изменений в случае обновления
Код, добавленный в мой .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) или демона.

Как мне заставить это работать?

mtalexan
источник
действительно, сеанс dbus должен быть запущен перед пользовательским набором ключей (daemon), также когда вы используете пересылку x11, вы используете локальный
набор
Как показал первый подход, я начал сеанс dbus до запуска демона keyring. И вы говорите, что когда я выполняю команду, которая использует демон gnome-key-ring в моей удаленной системе, он устанавливает соединение через сокет $ DISPLAY обратно в мою исходную систему для подключения к сеансу dbus там? Это кажется крайне маловероятным, но я не знаю достаточно об этом, чтобы полностью не согласиться. Dbus не графический инструмент, это инструмент межпроцессного взаимодействия, который часто используется графическими приложениями.
Мталексан
Просто плеваться здесь, но вы пытались использовать xvfb, чтобы «подделать» xsession. Это может сработать, если вы запустите его (и завершите инициализацию) и экспортируете переменную DISPLAY так, чтобы dbus знал, что Xserver запущен
TAAPSogeking

Ответы:

0

Это может быть глупым ответом ... но gnome-keyring нужен доступ к сеансу X11, по крайней мере, для запроса главного ключа. Итак, просто невозможно заставить его работать, по замыслу ... не так ли?

EDIT: Может быть , не что невозможно. Смотрите этот пост , похоже на вашу проблему:

binarym
источник