Моє використання полягає в тому, що у мене є безголовий сервер, на якому здійснюється розробка програмного забезпечення. Я не включаю переадресацію X11 для SSH-підключень до неї, але не можу для віддалених місць з повільним з'єднанням.
Мені потрібне безпечне зберігання та кешування для моїх даних git, оскільки я регулярно працюю з 18-20 сховищами в дереві, тому я використовую git-poverljiv-gnome-keyring як git credency.helper, який спілкується за допомогою libgnome-keyring до gnome-keyring-демон. Щоб перевірити рішення, я встановив ПК з монітором, підтвердив, що брелок працював за замовчуванням у системі, а потім спробував це з SSH. Він працює з переадресацією X11, але без нього не працює.
Коли я підключений без переадресації X11, під час запиту введення запиту вводиться наступна помилка, і інструмент повертається до запиту в командному рядку:
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
Дослідження показує, що основна проблема полягає в тому, що gnome-keyring-демон демонструє, що з'єднання використовуватимуть dbus для спілкування з ним. Dbus не запускається, якщо немає сеансу X11, тому немає загальної шини dbus для gnome-keyring-daemon та libgnome-keyring для підключення.
Я знайшов два рішення, які інші опублікували на цю проблему, хоча жодне не працює належним чином для мене.
- Отримайте порт DBUS з існуючого сеансу, який використовує X11
- Вручну запустити новий порт DBUS
Під час приєднання до існуючого порту DBUS базовою концепцією є пошук PID існуючого сеансу входу, скидання середовища для цього PID з profs, пошук у ньому 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-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-демон не можна спілкуватися, процес зависає на деякий час, а потім виробляє цей вихід:
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) чи демона.
Як мені це зробити?