uso de chaveiro gnome sem uma sessão x

13

Meu caso de uso é que eu tenho um servidor sem cabeça no qual o desenvolvimento de software é realizado. Normalmente, habilito o encaminhamento do X11 para as conexões SSH, mas não posso para locais distantes com conexões lentas.
Preciso de armazenamento e armazenamento em cache seguros para minhas credenciais git, pois trabalho regularmente com repositórios 18 a 20 em uma árvore, por isso estou usando git-credential-gnome-keyring como o git credential.helper, que se comunica usando o libgnome-keyring ao gnome-keyring-daemon. Para testar soluções, configurei um PC com um monitor, confirmei o chaveiro trabalhado por padrão no sistema e tentei com o SSH. Ele funciona com o encaminhamento do X11, mas não funciona sem ele.

Quando estou conectado sem o encaminhamento do X11, o seguinte erro ocorre quando o chaveiro é consultado e a ferramenta volta a ser solicitada na linha de comando:

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

A investigação revela que o problema básico é que o gnome-keyring-daemon espera que as conexões usem o dbus para conversar com ele. O dbus não é iniciado se não houver sessão X11, portanto, não há um barramento dbus comum para o gnome-keyring-daemon e o libgnome-keyring ao qual se conectar.

Encontrei duas soluções que outras pessoas postaram para esse problema, embora nenhuma delas funcione corretamente para mim.

  1. Obter uma porta DBUS de uma sessão existente que usa o X11
  2. Iniciar manualmente uma nova porta DBUS

Ao conectar-se a uma porta DBUS existente, o conceito básico é encontrar o PID de uma sessão de logon existente, despejar o ambiente para esse PID a partir dos procfs, procurá-lo DBUS_SESSION_BUS_ADDRESSe exportá-lo no ambiente atual. Como essa é a variável usada para publicar o barramento DBUS que está sendo usado por tudo nas sessões, a configuração deve permitir que tudo na sessão se comunique em um barramento DBUS comum, embora seja o barramento associado a uma sessão diferente.
Fontes aqui:
https://ubuntuforums.org/showthread.php?t=1059023

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

Code adicionado ao meu .bashrc sendo executado no 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

O segundo método, iniciar manualmente o DBUS para a sessão, envolve o uso dbus-launchpara criar uma nova sessão e definir o DBUS_SESSION_BUS_ADDRESSambiente, iniciando o gnome-keyring-daemon com todos os serviços necessários para que ele veja o endereço do barramento DBUS que criamos em vez de um endereço de barramento vazio. Esta solução pode ou não exigir que o gnome-keyring-daemon seja alterado para executar uma instância por sessão em vez de uma instância por sistema, mas não está claro.
Fontes:
começando com o número 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

Como modificar a linha "Exec" de um serviço dbus sem perder as alterações em caso de atualização
Código adicionado ao meu .bashrc sendo executado no 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

Ambas as soluções dão o mesmo resultado com falha. Em vez de produzir imediatamente o erro indicando que o gnome-keyring-daemon não pode ser comunicado, o processo trava por um tempo e depois produz esta saída:

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

Não estou claro como o gnome-keyring-daemon está interagindo com o DBUS, mas é claro que, a partir do segundo conjunto de erros, ele não pode ser acessado por um barramento DBUS recém-criado ou por um processo cruzado em um barramento DBUS diferente. Algumas das descobertas sugerem que o gnome-keyring-daemon pode precisar do DBUS iniciado antes dele, mas não está claro se esse é o caso do uso (libgnome-keyring) ou do daemon.

Como faço para isso funcionar?

mtalexan
fonte
de fato a necessidade sessão dbus a ser iniciado antes do utilizador chaveiro (daemon), também quando você usa x11 encaminhamento você estiver usando o chaveiro local não o controle remoto ...
intika
Como a primeira abordagem mostrou, iniciei a sessão do dbus antes que o daemon do chaveiro fosse iniciado. E você está dizendo que, quando executo um comando que faz uso do daemon gnome-key-ring no meu sistema remoto, ele está fazendo uma conexão através do soquete $ DISPLAY de volta ao meu sistema de origem para conectar-se à sessão dbus lá? Parece extremamente improvável, mas não sei o suficiente para discordar totalmente. O Dbus não é uma ferramenta gráfica, é uma ferramenta de comunicação entre processos que é usada muito por aplicativos gráficos.
Mtalexan 31/05/19
Apenas cuspir aqui, mas você já tentou usar o xvfb para "falsificar" uma xsession. Pode funcionar se você tem ele seja executado (e terminar a inicialização) e exportados DISPLAY var tal que dbus sabe um Xserver está em execução
TAAPSogeking

Respostas:

0

Esta pode ser uma resposta estúpida ... mas, o gnome-keyring precisa de acesso a uma sessão X11, pelo menos para solicitar sua chave mestra. Então, é simplesmente impossível fazê-lo funcionar, por design ... não é?

EDIT: Talvez não seja tão impossível. Veja este post , semelhante ao seu problema:

binarym
fonte