użycie klucza gnome bez sesji x

14

Mój przypadek użycia polega na tym, że mam serwer bezgłowy, na którym odbywa się tworzenie oprogramowania. Zazwyczaj włączam przekazywanie X11 dla połączeń SSH do niego, ale nie mogę dla odległych lokalizacji z powolnymi połączeniami.
Potrzebuję bezpiecznego przechowywania i buforowania moich poświadczeń git, ponieważ regularnie pracuję z 18-20 repozytoriami w drzewie, więc używam git-credential-gnome-keyring jako git credential.helper, który komunikuje się za pomocą libgnome-keyring do gnome-keyring-daemon. Aby przetestować rozwiązania, zainstalowałem komputer z monitorem, potwierdziłem, że brelok działa domyślnie w systemie, a następnie wypróbowałem go z SSH. Działa z przekazywaniem X11, ale nie działa bez niego.

Gdy jestem połączony bez przekazywania X11, po zapytaniu o klucz pojawia się następujący błąd, a narzędzie powraca do monitowania w wierszu polecenia:

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

Dochodzenie ujawnia, że ​​podstawowym problemem jest to, że demon klucza-gnome oczekuje, że połączenia będą używać dbus do rozmowy z nim. Dbus nie jest uruchamiany, jeśli nie ma sesji X11, więc nie ma wspólnej magistrali dbus dla gnome-keyring-demona i libgnome-keyring, z którymi można się połączyć.

Znalazłem dwa rozwiązania, które inni napisali o tym problemie, ale żadne z nich nie działa poprawnie dla mnie.

  1. Uzyskaj port DBUS z istniejącej sesji korzystającej z X11
  2. Ręcznie uruchom nowy port DBUS

Podczas podłączania do istniejącego portu DBUS podstawową koncepcją jest znalezienie PID istniejącej sesji logowania, zrzucenie środowiska dla tego PID z procfs, wyszukanie go DBUS_SESSION_BUS_ADDRESSi wyeksportowanie w bieżącym środowisku. Ponieważ jest to zmienna używana do publikowania magistrali DBUS używanej przez wszystko w sesjach, ustawienie tej opcji powinno umożliwić wszystkim w sesji komunikowanie się na wspólnej magistrali DBUS, chociaż jest to magistrala związana z inną sesją.
Źródła tutaj:
https://ubuntuforums.org/showthread.php?t=1059023

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

Kod dodany do mojego .bashrc wykonywany przy logowaniu 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

Druga metoda, ręczne uruchamianie DBUS dla sesji, polega dbus-launchna utworzeniu nowej sesji i ustawieniu DBUS_SESSION_BUS_ADDRESSśrodowiska, a następnie uruchomieniu demona klucza gnome ze wszystkimi niezbędnymi usługami, aby zobaczył utworzony przez nas adres magistrali DBUS zamiast pustego adresu magistrali. To rozwiązanie może, ale nie musi, wymagać zmiany demona gnome-keyring-demona, aby uruchamiał jedną instancję na sesję zamiast jednej instancji na system, ale nie jest to jasne.
Źródła:
począwszy od numeru 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

Jak zmodyfikować linię „Exec” usługi dbus bez utraty zmian w przypadku aktualizacji
Kod dodany do mojego .bashrc wykonywanego przy logowaniu 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

Oba rozwiązania dają ten sam nieudany wynik. Zamiast natychmiastowego wygenerowania błędu wskazującego, że nie można nawiązać komunikacji z demonem-kluczem-gnome, proces zawiesza się na chwilę, a następnie generuje następujące dane wyjściowe:

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

Nie jestem pewien, w jaki sposób demon gnome-keyring wchodzi w interakcję z DBUS, ale z drugiego zestawu błędów wynika, że ​​nie jest osiągalny przez nowo utworzoną magistralę DBUS lub cross-process na innej magistrali DBUS. Niektóre z tego, co znalazłem, sugerują, że demon gnome-keyring może wymagać uruchomienia DBUS przed nim, ale nie jest jasne, czy tak jest w przypadku użycia (libgnome-keyring) czy demona.

Jak mogę to uruchomić?

mtalexan
źródło
rzeczywiście potrzeba sesji dbus być rozpoczęte przed użytkownika kluczy (demon) również podczas korzystania x11 spedycja używasz lokalnej bazy kluczy nie pilot jeden ...
intika
Jak pokazało pierwsze podejście, zacząłem sesję dbus przed uruchomieniem demona kluczy. I mówisz, że kiedy wykonuję polecenie, które korzysta z demona gnome-key-ring w moim zdalnym systemie, nawiązuje połączenie przez gniazdo $ DISPLAY z powrotem do mojego systemu źródłowego, aby połączyć się tam z sesją dbus? Wydaje się to niezwykle mało prawdopodobne, ale nie wiem wystarczająco dużo, aby się całkowicie nie zgodzić. Dbus nie jest narzędziem graficznym, jest narzędziem komunikacji między procesami, które jest często używane przez aplikacje graficzne.
mtalexan
Po prostu spitballing tutaj, ale czy próbowałeś użyć xvfb do „sfałszowania” xsession. Może działać, jeśli masz go uruchomić (i zakończyć inicjalizację) i wyeksportować DISPLAY var tak, że dbus wie, że Xserver działa
TAAPSogeking

Odpowiedzi:

1

To może być głupia odpowiedź ... ale breloczek do gnome potrzebuje dostępu do sesji X11, przynajmniej po to, by poprosić cię o klucz główny. Tak więc po prostu niemożliwe jest, aby działało zgodnie z projektem ... prawda?

EDYCJA: Może nie jest to niemożliwe. Zobacz ten post , wygląda podobnie do Twojego problemu:

binarym
źródło