sử dụng khóa gnome mà không có phiên x


13

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.

  1. Nhận cổng DBUS từ phiên hiện có sử dụng X11
  2. 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_ADDRESSvà 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_ADDRESSmô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?


thực sự cũng cần phải bắt đầu phiên dbus trước khi khóa người dùng (daemon) khi bạn sử dụng chuyển tiếp x11, bạn đang sử dụng khóa cục bộ chứ không phải từ xa ...
intika

Như cách tiếp cận đầu tiên cho thấy, tôi đã bắt đầu phiên dbus trước khi trình nền khóa được bắt đầu. Và bạn đang nói rằng khi tôi thực thi một lệnh sử dụng trình nền vòng gnome-key-ring trên hệ thống từ xa của mình, thì nó có kết nối thông qua ổ cắm $ HIỂN THỊ trở lại hệ thống nguồn của tôi để kết nối với phiên dbus ở đó không? Điều đó dường như cực kỳ khó xảy ra, nhưng tôi không biết đủ về nó để không đồng ý hoàn toàn. Dbus không phải là một công cụ đồ họa, nó là một công cụ giao tiếp giữa các quá trình được sử dụng rất nhiều bởi các ứng dụng đồ họa.
mtalexan

Chỉ cần spitballing ở đây, nhưng bạn đã thử sử dụng xvfb để "giả" một xsession. Nó có thể hoạt động nếu bạn có nó để chạy (và hoàn thành khởi tạo) và xuất var HIỂN THỊ để dbus biết Xserver đang chạy
TAAPSogeking

Câu trả lời:


0

Đây có thể là một câu trả lời ngu ngốc ... nhưng, gnome-keyring cần truy cập vào phiên X11, ít nhất là để nhắc nhở bạn về khóa chính. Vì vậy, nó không thể làm cho nó chạy, theo thiết kế ... phải không?

EDIT: Có lẽ không phải không thể. Xem bài đăng này , trông tương tự như vấn đề của bạn:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.