Trường hợp sử dụng của tôi là tôi có một máy chủ không đầu mà việc phát triển phần mềm được thực hiện trên đó. Tôi thường cho phép chuyển tiếp X11 cho các kết nối SSH tới nó, nhưng tôi không thể cho các vị trí xa có kết nối chậm.
Tôi cần lưu trữ và lưu trữ an toàn cho thông tin đăng nhập git của mình vì tôi thường xuyên làm việc với 18-20 kho lưu trữ trong một cây, vì vậy tôi đang sử dụng git-cert-gnome-keyring làm git cert.rcper, giao tiếp bằng cách sử dụng khóa libgnome đến gnome-keyring-daemon. Để kiểm tra các giải pháp, tôi thiết lập PC với màn hình, xác nhận khóa hoạt động theo mặc định trên hệ thống, sau đó thử với SSH. Nó hoạt động với chuyển tiếp X11, nhưng không hoạt động mà không có nó.
Khi tôi được kết nối mà không chuyển tiếp X11, lỗi sau sẽ xảy ra khi khóa được truy vấn và công cụ quay lại nhắc nhở trên dòng lệnh:
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
Điều tra cho thấy vấn đề cơ bản là gnome-keyring-daemon đang mong đợi các kết nối sử dụng dbus để nói chuyện với nó. Dbus không bắt đầu nếu không có phiên X11, vì vậy không có bus dbus chung cho gnome-keyring-daemon và libgnome-keyring để kết nối.
Tôi đã tìm thấy hai giải pháp mà những người khác đã đăng lên vấn đề này, mặc dù không có giải pháp nào phù hợp với tôi.
- Nhận cổng DBUS từ phiên hiện có sử dụng X11
- Khởi chạy thủ công một cổng DBUS mới
Khi gắn vào một cổng DBUS hiện có, khái niệm cơ sở là tìm ra PID của phiên đăng nhập hiện có, kết xuất môi trường cho PID đó từ các Procfs, tìm kiếm nó DBUS_SESSION_BUS_ADDRESS
và xuất nó trong môi trường hiện tại. Vì đây là biến được sử dụng để xuất bản bus DBUS đang được sử dụng bởi mọi thứ trong các phiên, nên cài đặt này sẽ cho phép mọi thứ trong phiên giao tiếp trên một bus DBUS chung, mặc dù đó là bus được liên kết với một phiên khác.
Nguồn tại đây:
https://ubuntuforums.org/showthread.php?t=1059023
https://ask.fedoraproject.org/en/question/45246/error-cransicating-with-gnome-keyring-daemon-in-ssh- session /
Code được thêm vào .bashrc của tôi đang được thực thi khi đăng nhập 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
Phương thức thứ hai, khởi chạy thủ công DBUS cho phiên, liên quan đến việc sử dụng dbus-launch
để tạo phiên mới và thiết lập DBUS_SESSION_BUS_ADDRESS
môi trường, sau đó bắt đầu gnome-keyring-daemon với tất cả các dịch vụ cần thiết để nó sẽ thấy địa chỉ bus DBUS chúng tôi đã tạo thay vì một địa chỉ xe buýt trống. Giải pháp này có thể hoặc không yêu cầu gnome-keyring-daemon được thay đổi để chạy một phiên bản cho mỗi phiên thay vì một phiên bản cho mỗi hệ thống, nhưng không rõ ràng.
Nguồn:
Bắt đầu với số 8: https://support.wandisco.com/index.php?/Knowledridease/Article/View/362/17/how-to-setup-encrypted-svn-password-st Storage-USE-gnome- keyring-in-an-ssh-session
Cách sửa đổi dòng "Exec" của dịch vụ dbus mà không làm mất các thay đổi trong trường hợp nâng cấp
Mã được thêm vào .bashrc của tôi đang được thực thi khi đăng nhập 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
Cả hai giải pháp đều cho kết quả thất bại như nhau. Thay vì ngay lập tức tạo ra lỗi cho biết gnome-keyring-daemon không thể giao tiếp được, quá trình sẽ bị treo trong một thời gian và sau đó tạo đầu ra này:
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
Tôi không rõ về cách gnome-keyring-daemon tương tác với DBUS, nhưng rõ ràng từ tập kết quả lỗi thứ hai mà nó không thể truy cập được thông qua một bus DBUS mới được tạo hoặc xử lý chéo trên một bus DBUS khác. Một số trong những gì tôi tìm thấy cho thấy gnome-keyring-daemon có thể cần DBUS bắt đầu trước nó, nhưng không rõ đó là trường hợp sử dụng (libgnome-keyring) hay daemon.
Làm thế nào để tôi làm việc này?