กรณีการใช้งานของฉันคือฉันมีเซิร์ฟเวอร์ที่ไม่มีส่วนหัวที่ดำเนินการพัฒนาซอฟต์แวร์ ฉันเปิดใช้งานการส่งต่อ X11 สำหรับการเชื่อมต่อ SSH ตามปกติ แต่ฉันไม่สามารถทำได้สำหรับสถานที่ห่างไกลที่มีการเชื่อมต่อที่ช้า
ฉันต้องการพื้นที่เก็บข้อมูลและแคชที่ปลอดภัยสำหรับข้อมูลประจำตัว git ของฉันเนื่องจากฉันทำงานกับที่เก็บ 18-20 ในต้นไม้เป็นประจำดังนั้นฉันจึงใช้ git-credential-gnome-keyring เป็น git credential.helper ซึ่งสื่อสารโดยใช้ libgnome-keyring ไปที่ gnome-keyring-daemon ในการทดสอบวิธีแก้ปัญหาฉันติดตั้งพีซีด้วยจอภาพยืนยันว่าพวงกุญแจทำงานตามค่าเริ่มต้นในระบบจากนั้นลองใช้ SSH มันใช้งานได้กับการส่งต่อ X11 แต่ไม่สามารถทำงานได้หากไม่มี
เมื่อฉันเชื่อมต่อโดยไม่มีการส่งต่อ X11 ข้อผิดพลาดต่อไปนี้จะเกิดขึ้นเมื่อมีการสอบถามเกี่ยวกับการพวงกุญแจและเครื่องมือจะกลับไปที่การพร้อมท์บรรทัดคำสั่ง:
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
การสืบสวนพบว่าปัญหาพื้นฐานคือ gnome-keyring-daemon คาดว่าการเชื่อมต่อจะใช้ dbus เพื่อพูดคุยกับมัน dbus ไม่เริ่มทำงานหากไม่มีเซสชัน X11 ดังนั้นจึงไม่มีบัสบัสทั่วไปสำหรับ gnome-keyring-daemon และ libgnome-keyring เพื่อเชื่อมต่อ
ฉันพบวิธีแก้ไขปัญหาสองวิธีที่ผู้อื่นโพสต์ไปที่ปัญหานี้ แต่ก็ใช้ไม่ได้สำหรับฉัน
- รับพอร์ต 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- เซสชั่น /
รหัสเพิ่ม. 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) หรือ daemon
ฉันจะทำงานนี้ได้อย่างไร