Onde o gnome-keyring define $ SSH_AUTH_SOCK?

8

Estou no processo de me livrar de gnome-keyring como agente SSH.

Coisas que eu fiz

  • Pesquisou na internet por horas.
  • Alterou o material e reiniciou, muitas vezes.
  • Finalmente, apenas rm -ed todo o material de início automático relacionado ao SSH.

Essa última coisa funcionou magicamente, já que não há mais o soquete para o agente:

/run/user/[uid]/keyring/ssh

Problema

O problema restante é que apesar de ter obtido o maravilhoso resultado mencionado acima, algo em gnome-keyring ainda insiste em definir SSH_AUTH_SOCK para o agora soquete não existente acima. É como zumbis, essas coisas nunca morrem.

Pergunta

O que está configurando essa variável e onde ela é feita?

Armadilhas

  • Estou não perguntando como posso redefinir essa variável para outro valor.
  • Estou não perguntando como posso definir esse valor em todo o sistema ou em um arquivo de configuração de shell.
  • Eu não estou pedindo alguns encantamentos de vodu de script de inicialização para congelar, definir, redefinir, remover ou substituir qualquer coisa.
  • Estou não pedindo conselhos sobre como desinstalar a coisa: ainda preciso dela para minhas senhas e parece ser o gerenciador de senhas mais integrado e aprimorado do Gnome.

Eu quero essa coisa desativada como deveria ser.

    
por JohnW 07.10.2016 / 17:36

4 respostas

5

(o ambiente do OP não é conhecido, então os caminhos dados aqui são aqueles encontrados na minha máquina Ubuntu)

Onde o conjunto de chaves do GNOME ajusta SSH_AUTH_SOCK?

Para responder a pergunta principal no título, SSH_AUTH_SOCK é definido pelo gnome-keyring em /usr/share/upstart/sessions/gnome-keyring-ssh.conf com o seguinte comando:

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

Citando o manual initctl :

initctl set-env VARIABLE[=VALUE]

Adds or updates a variable in a job environment table. Variables set in this way will apply to all the subsequently-starting processes for a job.

-g, --global

Operate on the global job environment table and all existing running job environment tables.

De onde vem o SSH_AUTH_SOCK?

O comando initctl acima está condicionado ao fato de que a variável de ambiente SSH_AUTH_SOCK já existe. Então, é uma situação de galinha e ovo? O que o define?

SSH_AUTH_SOCK é inicialmente definido pelo agente ssh original que é iniciado no início da sessão X. Citando o manual:

A UNIX-domain socket is created and the name of this socket is stored in the SSH_AUTH_SOCK environment variable. The socket is made accessible only to the current user.

MAS, o que o componente ssh do gnome-keyring faz é substituir-se ao ssh-agent existente. Portanto, ele sobrescreve o SSH_AUTH_SOCK com seu próprio soquete /run/user/.../keyring-.../ssh para que os aplicativos falem com ele, e não com o ssh-agent.

Como desativá-lo

Agora, vamos responder a última frase "Eu quero aquela coisa desativada". O que o OP quer é desabilitar a sobrescrita do SSH_AUTH_SOCK pelo componente ssh no gnome-keyring. Eles querem recuperar a variável "true" SSH_AUTH_SOCK inicialmente configurada pelo ssh-agent.

O componente ssh é iniciado pelo mesmo script de inicialização mencionado acima ( /usr/share/upstart/sessions/gnome-keyring-ssh.conf ), mas com uma condição: a string X-GNOME-Autostart-enabled=false não deve ser encontrada em nenhum desses arquivos:

  • (conf de todo o sistema) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (conf do usuário) ~/.config/autostart/gnome-keyring-ssh.desktop
Portanto, se você quiser desabilitá-lo, tudo o que você precisa fazer é adicionar uma linha X-GNOME-Autostart-enabled=false a um desses arquivos, preferencialmente aquele em seu diretório HOME.

    
por 18.01.2017 / 01:12
5

Deixe-me adivinhar - você está usando o Wayland. Eu me deparei com esse problema hoje e percebi que compartilharia a solução.

O Gnome-Session tem uma substituição codificada para SSH_AUTH_SOCK sob o wayland por algum motivo. Veja o seguinte commit: link

A solução alternativa? Defina uma variável de ambiente para desativar esse comportamento: GSM_SKIP_SSH_AGENT_WORKAROUND=1 . Isso causa um curto-circuito no código de configuração do ambiente.

Para pessoas que encontram isso que também estão tentando configurar o ssh-agent: No meu arquivo de unidade systemd para o ssh-agent, eu tenho a seguinte linha:

ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

O arquivo completo é assim:

[Unit]
Description=SSH Agent
IgnoreOnIsolate=true

[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK
ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

[Install]
WantedBy=default.target

Espero que isso ajude!

    
por 20.04.2017 / 23:41
3

link

If you wish to run an alternative SSH agent (e.g. ssh-agent or gpg-agent, you need to disable the ssh component of GNOME Keyring. To do so in an account-local way:

mkdir ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ &&
echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-ssh.desktop

Then log out.

Editar levemente, removendo o uso aparentemente inútil de printf

    
por 29.10.2016 / 23:42
0

A partir do Gnome 3.18, o soquete parece estar armazenado em ~/.cache/keyring-(some random string)/ssh

Por um palpite, ele está sendo definido pelo gnome-keyring-daemon.

    
por 29.10.2016 / 23:24