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.
- Dapatkan port DBUS dari sesi yang ada yang menggunakan X11
- 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-launch
untuk membuat sesi baru dan mengatur DBUS_SESSION_BUS_ADDRESS
lingkungan, 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?