penggunaan gnome-keyring tanpa sesi x

13

Kasus penggunaan saya adalah bahwa saya memiliki server tanpa kepala tempat pengembangan perangkat lunak dilakukan. Saya biasanya mengaktifkan penerusan X11 untuk koneksi SSH ke sana, tapi saya tidak bisa untuk lokasi yang jauh dengan koneksi lambat.
Saya perlu penyimpanan dan caching yang aman untuk kredensial git saya karena saya secara teratur bekerja dengan 18-20 repositori di pohon, jadi saya menggunakan git-credential-gnome-keyring sebagai git credential.helper, yang berkomunikasi menggunakan libgnome-keyring ke daemon gnome-keyring. Untuk menguji solusi, saya mengatur PC dengan monitor, mengkonfirmasi keyring berfungsi secara default pada sistem, kemudian mencobanya dengan SSH. Ini berfungsi dengan penerusan X11, tetapi tidak berfungsi tanpa itu.

Ketika saya terhubung tanpa penerusan X11, kesalahan berikut terjadi ketika keyring dipertanyakan, dan alat kembali ke meminta pada baris perintah:

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

Investigasi mengungkapkan bahwa masalah dasar adalah bahwa gnome-keyring-daemon mengharapkan koneksi untuk menggunakan dbus untuk berbicara dengannya. Dbus tidak dimulai jika tidak ada sesi X11, jadi tidak ada bus dbus umum untuk gnome-keyring-daemon dan libgnome-keyring untuk terhubung.

Saya telah menemukan dua solusi yang diposkan orang lain untuk masalah ini, meskipun tidak ada yang berfungsi dengan baik untuk saya.

  1. Dapatkan port DBUS dari sesi yang ada yang menggunakan X11
  2. Secara manual meluncurkan port DBUS baru

Ketika melampirkan ke port DBUS yang ada, konsep dasarnya adalah menemukan PID dari sesi login yang ada, membuang lingkungan untuk PID itu dari procfs, mencarinya DBUS_SESSION_BUS_ADDRESS, dan mengekspornya di lingkungan saat ini. Karena ini adalah variabel yang digunakan untuk menerbitkan bus DBUS yang digunakan oleh semua yang ada di sesi, pengaturan ini harus memungkinkan semua yang ada di sesi untuk berkomunikasi pada bus DBUS umum, meskipun itu bus yang terkait dengan sesi yang berbeda.
Sumber di sini:
https://ubuntuforums.org/showthread.php?t=1059023

https://ask.fedoraproject.org/en/question/45246/error-communicating-with-gnome-keyring-daemon-in-ssh- session /

Code ditambahkan ke .bashrc saya dieksekusi pada login 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

Metode kedua, secara manual meluncurkan DBUS untuk sesi tersebut, melibatkan penggunaan dbus-launchuntuk membuat sesi baru dan mengatur DBUS_SESSION_BUS_ADDRESSlingkungan, kemudian memulai gnome-keyring-daemon dengan semua layanan yang diperlukan sehingga akan melihat alamat bus DBUS yang kami buat daripada alamat bus kosong. Solusi ini mungkin atau mungkin tidak memerlukan gnome-keyring-daemon diubah untuk menjalankan satu instance per sesi daripada satu instance per sistem, tetapi tidak jelas.
Sumber:
Dimulai dengan nomor 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

Bagaimana mengubah saluran "Exec" layanan dbus tanpa kehilangan perubahan jika terjadi peningkatan
Kode ditambahkan ke .bashrc saya dieksekusi pada login 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

Kedua solusi memberikan hasil gagal yang sama. Alih-alih segera menghasilkan kesalahan yang menunjukkan daemon gnome-keyring-tidak dapat dikomunikasikan dengan, proses hang untuk sementara waktu dan kemudian menghasilkan output ini:

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

Saya tidak jelas tentang bagaimana daemon gnome-keyring-berinteraksi dengan DBUS, tetapi jelas dari set kedua hasil kesalahan bahwa itu tidak dapat dicapai melalui bus DBUS yang baru dibuat, atau proses silang pada bus DBUS yang berbeda. Beberapa dari apa yang saya temukan menyarankan gnome-keyring-daemon mungkin memerlukan DBUS yang dimulai sebelumnya, tetapi tidak jelas apakah itu kasus untuk penggunaan (libgnome-keyring) atau daemon.

Bagaimana saya membuatnya bekerja?

mtalexan
sumber
memang sesi dbus harus dimulai sebelum keyring pengguna (daemon) juga ketika Anda menggunakan penerusan x11 Anda menggunakan keyring lokal bukan yang remote ...
intika
Seperti yang ditunjukkan oleh pendekatan pertama, saya memulai sesi dbus sebelum daemon keyring dimulai. Dan Anda mengatakan bahwa ketika saya menjalankan perintah yang menggunakan daemon gnome-key-ring di sistem jarak jauh saya, itu membuat koneksi melalui soket $ DISPLAY kembali ke sistem sumber saya untuk terhubung ke sesi dbus di sana? Tampaknya sangat tidak mungkin, tetapi saya tidak cukup tahu tentang hal itu sehingga tidak sepenuhnya setuju. Dbus bukan alat grafis, ini adalah alat komunikasi antar-proses yang banyak digunakan oleh aplikasi grafis.
mtalexan
Hanya meludah di sini, tetapi apakah Anda sudah mencoba menggunakan xvfb untuk "memalsukan" xsession. Ini mungkin berhasil jika Anda menjalankannya (dan menyelesaikan inisialisasi) dan mengekspor DISPLAY var sehingga dbus tahu Xserver sedang berjalan
TAAPSogeking

Jawaban:

0

Ini mungkin jawaban yang bodoh ... tetapi, gnome-keyring memerlukan akses ke sesi X11, setidaknya untuk meminta kunci master Anda. Jadi, tidak mungkin membuatnya berjalan, dengan desain ... bukan?

EDIT: Mungkin bukan itu tidak mungkin. Lihat posting ini , terlihat mirip dengan masalah Anda:

binarym
sumber