मेरा उपयोग मामला यह है कि मेरे पास एक हेडलेस सर्वर है जिस पर सॉफ्टवेयर डेवलपमेंट किया जाता है। मैं ussually SSH कनेक्शन के लिए X11 को अग्रेषित करने में सक्षम करता हूं, लेकिन मैं धीमे कनेक्शन के साथ दूर के स्थानों के लिए नहीं जा सकता।
मुझे अपने git क्रेडेंशियल्स के लिए सुरक्षित भंडारण और कैशिंग की आवश्यकता है क्योंकि मैं नियमित रूप से एक पेड़ में 18-20 रिपॉजिटरी के साथ काम करता हूं, इसलिए मैं git क्रेडेंशियल-ग्नम-कीरिंग को git क्रेडेंशियल.हेलर के रूप में उपयोग कर रहा हूं, जो कामेच्छा-कीरिंग का उपयोग करके संचार करता है सूक्ति-कीरिंग-डेमन। समाधान का परीक्षण करने के लिए, मैंने एक मॉनिटर के साथ एक पीसी सेटअप किया, सिस्टम पर डिफ़ॉल्ट रूप से काम करने वाले कीरिंग की पुष्टि की, फिर एसएसएच के साथ इसकी कोशिश की। यह X11 अग्रेषण के साथ काम करता है, लेकिन इसके बिना काम नहीं करता है।
जब मैं X11 अग्रेषण के बिना जुड़ा हुआ हूं, तो कीरिंग के दौरान निम्न त्रुटि का परिणाम होता है, और टूल कमांड-लाइन पर संकेत देने के लिए वापस आ जाता है:
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
जांच से पता चलता है कि आधार समस्या यह है कि सूक्ति-कीरिंग-डेमॉन से बात करने के लिए डब का उपयोग करने के लिए कनेक्शन की उम्मीद है। यदि कोई X11 सत्र नहीं है, तो dbus शुरू नहीं हुई है, इसलिए कनेक्ट करने के लिए सूक्ति-कीरिंग-डेमॉन और libgnome-keyring के लिए कोई सामान्य dbus बस नहीं है।
मैंने पाया है कि दो समाधान दूसरों ने इस समस्या के लिए पोस्ट किए हैं, हालांकि न तो मेरे लिए ठीक से काम करता है।
- मौजूदा सत्र से एक DBUS पोर्ट प्राप्त करें जो X11 का उपयोग करता है
- मैन्युअल रूप से एक नया 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-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
पर्यावरण के लिए सेट करने के लिए उपयोग करना शामिल है, फिर सभी आवश्यक सेवाओं के साथ सूक्ति-कीरिंग-डेमन शुरू करना ताकि यह हमारे द्वारा बनाए गए DBUS बस पते को देख सके। खाली बस पते के बजाय। इस समाधान के लिए gnome-keyring-daemon की आवश्यकता हो सकती है या नहीं प्रति सिस्टम एक उदाहरण के बजाय प्रति सत्र एक उदाहरण को चलाने के लिए परिवर्तित किया जा सकता है, लेकिन यह स्पष्ट नहीं है।
स्रोत:
संख्या 8 से शुरू: https://support.wandisco.com/index.php?/Knowledgebase/Article/View/362/17/how-to-setup-encrypted-svn-password-storage-use-gnome- कीरिंग-इन- ए-एसएचएस सत्र
उन्नयन के मामले में परिवर्तन को खोने के बिना एक डबस सेवा की "एक्सेक" लाइन को कैसे संशोधित किया जाए
कोड मेरे .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
दोनों समाधान एक ही असफल परिणाम देते हैं। तुरंत त्रुटि उत्पन्न करने के बजाय सूक्ति-कीरिंग-डेमन के साथ संचार नहीं किया जा सकता है, इस प्रक्रिया में थोड़ी देर के लिए लटका होता है और फिर इस आउटपुट का उत्पादन होता है:
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 बस पर क्रॉस-प्रोसेस के माध्यम से उपलब्ध नहीं है। मैंने जो कुछ पाया है, उससे पता चलता है कि सूक्ति-कीरिंग-डेमॉन को इससे पहले शुरू होने वाले डीबीयूएस की आवश्यकता हो सकती है, लेकिन यह स्पष्ट नहीं है कि उपयोग के लिए मामला है (कामोन्माद-कीरिंग) या डेमन।
मुझे यह काम कैसे मिलेगा?