Onde o gnome-keyring define $ SSH_AUTH_SOCK?

10

Estou no processo de me livrar gnome-keyringcomo um agente SSH.

Coisas que eu fiz

  • Pesquisou na internet por horas.
  • Coisas alteradas e reiniciadas, frequentemente.
  • Finalmente acabei de rmeditar todas as coisas de inicialização automática relacionadas ao SSH.

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

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

Problema

O problema restante é que , apesar da minha obtenção do resultado referido maravilhoso, algo em gnome-keyringainda insiste em definir SSH_AUTH_SOCKo agora inexistente tomada acima. É como zumbis, essas coisas nunca morrem.

Questão

O que está definindo essa variável e onde é feito?

Armadilhas

  • Estou não perguntando como eu pode 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 do shell.
  • Estou não pedir alguns encantamentos init-script de vodu para congelar, set, reset, unset ou substituir qualquer coisa.
  • Estou não pedindo conselhos sobre como desinstalar a coisa: eu ainda preciso dele para minhas senhas e parece ser o gerenciador de senhas mais integrada e polido no Gnome.

Eu quero essa coisa desabilitada como deveria ser.

JohnW
fonte
2
Desinstalar gnome-keyring?
Rudimeier # 7/16
1
@rudimeier: Eu ainda preciso do gnome-keyring para minhas senhas e, até onde eu sei, não há nada mais polido e integrado no Gnome.
johnw
@rudimeier mesmo isso não parece ajudar. Eu tentei.
André Borie 10/01

Respostas:

8

Deixe-me adivinhar - você está usando Wayland. Encontrei esse problema hoje e imaginei compartilhar a solução.

O Gnome-Session tem uma substituição codificada SSH_AUTH_SOCKno caminho para o solo por algum motivo. Consulte o seguinte commit: https://github.com/GNOME/gnome-session/commit/a8896ccad65583885735a04205351f48a42f29ae

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

Para pessoas que acham isso que também estão tentando configurar o ssh-agent: No meu arquivo de unidade systemd para ssh-agent, 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 fica 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
ceezy
fonte
Obrigado! No Ubuntu v17.10, Artful Aardvark, simplesmente adicionar export GSM_SKIP_SSH_AGENT_WORKAROUND=1ao meu ~ / .profile e reiniciar corrigia minha configuração que funcionava anteriormente na v17.04.
Stephen Niedzielski
Isso parece afetar mais do que apenas Wayland, eu tenho encontrado isso ao tentar usar o gnome-flashback + i3.
precisa saber é o seguinte
Por favor note que que as obras de hackers até Gnome 3.24 ou mais ( wiki.archlinux.org/index.php/GNOME/... )
Pablo Olmos de Aguilera C.
5

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

Onde o gnome-keyring define SSH_AUTH_SOCK?

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

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

Citando o initctlmanual:

initctl set-env VARIABLE[=VALUE]

Adiciona ou atualiza uma variável em uma tabela de ambiente de trabalho. As variáveis ​​definidas dessa maneira serão aplicadas a todos os processos de inicialização subsequente de um trabalho.

-g, --global

Opere na tabela do ambiente de tarefas global e em todas as tabelas existentes do ambiente de tarefas em execução.

De onde vem SSH_AUTH_SOCK em primeiro lugar?

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

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

Um soquete do domínio UNIX é criado e o nome desse soquete é armazenado na SSH_AUTH_SOCKvariável de ambiente. O soquete é acessível apenas ao usuário atual.

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

Como desabilitá-lo

Agora, vamos responder a última frase "Eu quero essa coisa desativada". O que o OP quer é desativar a substituição de SSH_AUTH_SOCK pelo componente ssh no gnome-keyring. Eles querem recuperar a variável "true" SSH_AUTH_SOCK inicialmente definida 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 sequência X-GNOME-Autostart-enabled=falsenão deve ser encontrada em nenhum desses arquivos:

  • (conf em todo o sistema) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (conf do usuário) ~/.config/autostart/gnome-keyring-ssh.desktop

Portanto, se você deseja desativá-lo, tudo o que você precisa fazer é adicionar uma linha X-GNOME-Autostart-enabled=falsea um desses arquivos, de preferência aquele em seu diretório HOME.

xhienne
fonte
Eu tentei desabilitar as entradas de início automático para o chaveiro do Gnome e parece que a variável ainda está lá, mas aponta para um soquete inexistente (portanto, desativar o chaveiro funcionou, mas a variável está definida em outro lugar). Estou executando uma máquina Archlinux por isso não há arrivista e não há nada óbvio em systemd que iria definir a variável ..
André Borie
@ AndréBorie Não conheço nem Arch nem systemd. Qual é o novo valor do caminho do soquete? No meu macihne, o ssh-agent normalmente o define /tmp/ssh-XXX/agent.PID. O ssh-agent ainda está na sua lista de processos?
xhienne
O caminho é exatamente como na pergunta original. Não há agentes SSH nem chaveiros em execução.
André Borie
Esta resposta é muito velho, mas eu espero que você possa me ajudar também unix.stackexchange.com/questions/422574/...
OJS
3

https://wiki.archlinux.org/index.php/GNOME/Keyring#Disable_keyring_daemon_components

Se você deseja executar um agente SSH alternativo (por exemplo, ssh-agent ou gpg-agent, você precisa desativar o componente ssh do GNOME Keyring. Para fazer isso de uma maneira local da conta:

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

Então saia.

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

sourcejedi
fonte
Isso também funciona para mim no Ubuntu 14.04.
pts
Isso vale para a versão 3.24 e mais recente.
Pablo Olmos de Aguilera C.
0

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

Em suposição, ele está sendo definido pelo gnome-keyring-daemon.

Adam Baxter
fonte