การใช้งาน gnome-keyring โดยไม่มีเซสชัน x


14

กรณีการใช้งานของฉันคือฉันมีเซิร์ฟเวอร์ที่ไม่มีส่วนหัวที่ดำเนินการพัฒนาซอฟต์แวร์ ฉันเปิดใช้งานการส่งต่อ 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 เพื่อเชื่อมต่อ

ฉันพบวิธีแก้ไขปัญหาสองวิธีที่ผู้อื่นโพสต์ไปที่ปัญหานี้ แต่ก็ใช้ไม่ได้สำหรับฉัน

  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) หรือ daemon

ฉันจะทำงานนี้ได้อย่างไร


แน่นอนเซสชัน dbus ต้องเริ่มต้นก่อนที่ผู้ใช้ keyring (daemon) เช่นกันเมื่อคุณใช้การส่งต่อ x11 คุณกำลังใช้ local keyring ไม่ใช่ remote ...
intika

ตามวิธีแรกที่แสดงฉันเริ่มเซสชัน dbus ก่อนที่ keyring daemon จะเริ่มขึ้น และคุณกำลังบอกว่าเมื่อฉันรันคำสั่งที่ใช้ประโยชน์จาก gnome-key-ring daemon บนระบบระยะไกลของฉันมันกำลังทำการเชื่อมต่อผ่านซ็อกเก็ต $ DISPLAY กลับไปที่ระบบต้นทางของฉันเพื่อเชื่อมต่อกับเซสชัน dbus ที่นั่นหรือ ดูเหมือนจะไม่น่าเป็นไปได้มากนัก แต่ฉันไม่รู้ว่ามันจะไม่เห็นด้วยอย่างเต็มที่ Dbus ไม่ใช่เครื่องมือกราฟิก แต่เป็นเครื่องมือสื่อสารระหว่างกระบวนการที่มีการใช้งานบ่อยๆโดยแอพพลิเคชันกราฟิก
mtalexan

เพียงแค่ spitballing ที่นี่ แต่คุณลองใช้ xvfb เพื่อ "ปลอม" xsession มันอาจทำงานได้ถ้าคุณให้มันรัน (และเสร็จสิ้นการเริ่มต้น) และส่งออก var DISPLAY เพื่อให้ dbus รู้ว่า Xserver กำลังทำงานอยู่
TAAPSogeking

คำตอบ:


1

นี่อาจเป็นคำตอบที่งี่เง่า ... แต่ gnome-keyring จำเป็นต้องเข้าถึงเซสชั่น X11 อย่างน้อยก็เพื่อขอให้คุณใส่คีย์หลัก ดังนั้นมันเป็นไปไม่ได้เลยที่จะทำให้มันทำงานโดยการออกแบบ ... ใช่มั้ย

แก้ไข: อาจจะไม่ว่าเป็นไปไม่ได้ ดูโพสต์นี้คล้ายกับปัญหาของคุณ:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.