Mon cas d'utilisation est que j'ai un serveur sans tête sur lequel le développement logiciel est effectué. J'active généralement le transfert X11 pour les connexions SSH, mais je ne peux pas pour les emplacements distants avec des connexions lentes.
J'ai besoin d'un stockage et d'une mise en cache sécurisés pour mes informations d'identification git car je travaille régulièrement avec 18-20 référentiels dans une arborescence, donc j'utilise git-credential-gnome-keyring comme git credential.helper, qui communique à l'aide de libgnome-keyring au démon gnome-keyring-daemon. Pour tester les solutions, j'ai configuré un PC avec un moniteur, confirmé le trousseau de clés fonctionnait par défaut sur le système, puis l'ai essayé avec SSH. Il fonctionne avec le transfert X11, mais ne fonctionne pas sans lui.
Lorsque je suis connecté sans transfert X11, l'erreur suivante se produit lorsque le trousseau de clés est interrogé et l'outil revient à l'invite sur la ligne de commande:
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
L'enquête révèle que le problème de base est que gnome-keyring-daemon attend que les connexions utilisent dbus pour lui parler. Le dbus n'est pas démarré s'il n'y a pas de session X11, il n'y a donc pas de bus dbus commun auquel le gnome-keyring-daemon et libgnome-keyring peuvent se connecter.
J'ai trouvé deux solutions que d'autres ont publiées sur ce problème, mais aucune ne fonctionne correctement pour moi.
- Obtenir un port DBUS à partir d'une session existante qui utilise X11
- Lancer manuellement un nouveau port DBUS
Lors de la connexion à un port DBUS existant, le concept de base consiste à trouver le PID d'une session de connexion existante, à vider l'environnement de ce PID à partir du procfs, à le rechercher DBUS_SESSION_BUS_ADDRESS
et à l'exporter dans l'environnement actuel. Comme il s'agit de la variable utilisée pour publier le bus DBUS utilisé par tout dans les sessions, sa définition devrait permettre à tout ce qui se trouve dans la session de communiquer sur un bus DBUS commun, bien qu'il s'agisse du bus associé à une session différente.
Sources ici:
https://ubuntuforums.org/showthread.php?t=1059023
https://ask.fedoraproject.org/en/question/45246/error-communicating-with-gnome-keyring-daemon-in-ssh- session /
Code ajouté à mon .bashrc en cours d'exécution lors de la connexion 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
La deuxième méthode, le lancement manuel de DBUS pour la session, consiste à utiliser dbus-launch
pour créer une nouvelle session et définir l' DBUS_SESSION_BUS_ADDRESS
environnement pour l'environnement, puis à démarrer le démon gnome-keyring-daemon avec tous les services nécessaires pour qu'il puisse voir l'adresse du bus DBUS que nous avons créée. plutôt qu'une adresse de bus vide. Cette solution peut nécessiter ou non que gnome-keyring-daemon soit modifié pour exécuter une instance par session plutôt qu'une instance par système, mais ce n'est pas clair.
Sources:
À partir du numéro 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
Comment modifier la ligne "Exec" d'un service dbus sans perdre les changements en cas de mise à niveau
Code ajouté à mon .bashrc en cours d'exécution lors de la connexion 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
Les deux solutions donnent le même résultat défaillant. Au lieu de produire immédiatement l'erreur indiquant que le démon gnome-keyring-daemon ne peut pas être communiqué, le processus se bloque pendant un certain temps, puis produit cette sortie:
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
Je ne sais pas comment le gnome-keyring-daemon interagit avec DBUS, mais il ressort clairement du deuxième ensemble d'erreurs qu'il n'est pas accessible via un bus DBUS nouvellement créé, ou un processus croisé sur un bus DBUS différent. Certains de ce que j'ai trouvé suggèrent que le démon gnome-keyring-daemon pourrait avoir besoin que le DBUS soit démarré avant, mais il n'est pas clair si c'est le cas pour l'utilisation (libgnome-keyring) ou le démon.
Comment puis-je faire fonctionner cela?