utilizzo di gnome-keyring senza una sessione x


13

Il mio caso d'uso è che ho un server senza testa su cui viene eseguito lo sviluppo del software. Di solito abilito l'inoltro X11 per le connessioni SSH ad esso, ma non posso per posizioni distanti con connessioni lente.
Ho bisogno di archiviazione sicura e memorizzazione nella cache per le mie credenziali git poiché lavoro regolarmente con 18-20 repository in un albero, quindi sto usando git-credential-gnome-keyring come git credential.helper, che comunica usando il libgnome-keyring al demone gnome-keyring. Per testare le soluzioni, ho installato un PC con un monitor, ho confermato che il portachiavi funzionava di default sul sistema, quindi l'ho provato con SSH. Funziona con l'inoltro X11, ma non funziona senza di esso.

Quando sono connesso senza inoltro X11, il seguente errore si verifica quando viene richiesto il portachiavi e lo strumento torna al prompt sulla riga di comando:

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

L'indagine rivela che il problema di base è che gnome-keyring-daemon si aspetta che le connessioni utilizzino dbus per parlarci. Il dbus non viene avviato se non esiste una sessione X11, quindi non esiste un bus dbus comune per il gnome-keyring-daemon e il libgnome-keyring a cui connettersi.

Ho trovato due soluzioni che altri hanno pubblicato per questo problema, sebbene nessuna delle due funzioni correttamente per me.

  1. Ottieni una porta DBUS da una sessione esistente che utilizza X11
  2. Avviare manualmente una nuova porta DBUS

Quando si collega a una porta DBUS esistente, il concetto di base è quello di trovare il PID di una sessione di accesso esistente, scaricare l'ambiente per quel PID dai procf, cercarlo per DBUS_SESSION_BUS_ADDRESSed esportarlo nell'ambiente corrente. Poiché questa è la variabile utilizzata per pubblicare il bus DBUS utilizzato da tutto nelle sessioni, l'impostazione dovrebbe consentire a tutto nella sessione di comunicare su un bus DBUS comune, sebbene sia il bus associato a una sessione diversa.
Fonti qui:
https://ubuntuforums.org/showthread.php?t=1059023

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

codice aggiunto al mio .bashrc in esecuzione su 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

Il secondo metodo, l'avvio manuale di DBUS per la sessione, prevede l'utilizzo dbus-launchdi creare una nuova sessione e impostare l' DBUS_SESSION_BUS_ADDRESSambiente per, quindi avviare gnome-keyring-daemon con tutti i servizi necessari in modo che vedrà l'indirizzo del bus DBUS che abbiamo creato piuttosto che un indirizzo bus vuoto. Questa soluzione potrebbe richiedere o meno la modifica di gnome-keyring-daemon per eseguire un'istanza per sessione anziché un'istanza per sistema, ma non è chiaro.
Fonti: a
partire dal numero 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

Come modificare la riga "Exec" di un servizio dbus senza perdere le modifiche in caso di aggiornamento
Codice aggiunto al mio .bashrc in esecuzione al 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

Entrambe le soluzioni danno lo stesso risultato negativo. Invece di produrre immediatamente l'errore che indica che non è possibile comunicare con il demone gnome-keyring, il processo si blocca per un po 'e quindi produce questo output:

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

Non sono chiaro su come lo gnome-keyring-daemon stia interagendo con DBUS, ma dalla sua seconda serie di errori risulta chiaro che non è raggiungibile tramite un bus DBUS appena creato o cross-process su un bus DBUS diverso. Alcune delle cose che ho trovato suggeriscono che il demone gnome-keyring potrebbe aver bisogno del DBUS avviato prima di esso, ma non è chiaro se sia il caso dell'uso (libgnome-keyring) o del demone.

Come faccio a farlo funzionare?


infatti la sessione dbus deve essere avviata prima del keyring utente (demone) anche quando usi l'inoltro x11 stai usando il keyring locale non quello remoto ...
Intika,

Come ha mostrato il primo approccio, ho avviato la sessione dbus prima dell'avvio del daemon keyring. E stai dicendo che quando eseguo un comando che utilizza il demone gnome-key-ring sul mio sistema remoto, sta effettuando una connessione tramite il socket $ DISPLAY al mio sistema di origine per connettersi alla sessione dbus lì? Sembra estremamente improbabile, ma non ne so abbastanza per dissentire completamente. Dbus non è uno strumento grafico, è uno strumento di comunicazione tra processi che viene utilizzato molto dalle applicazioni grafiche.
mtalexan,

Spitballing qui, ma hai provato a usare xvfb per "fingere" una sessione x. Potrebbe funzionare se lo avessi eseguito (e terminato l'inizializzazione) ed esportato il var DISPLAY in modo tale che dbus sappia che un Xserver è in esecuzione
TAAPSogeking

Risposte:


0

Questa potrebbe essere una risposta stupida ... ma, gnome-keyring ha bisogno di accedere a una sessione X11, almeno per richiedere la chiave master. Quindi, è semplicemente impossibile farlo funzionare, in base alla progettazione ... non è vero?

EDIT: Forse no che impossibile. Vedi questo post , sembra simile al tuo problema:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.