Dove gnome-keyring imposta $ SSH_AUTH_SOCK?


10

Sono in procinto di sbarazzarmi di gnome-keyringun agente SSH.

Cose che ho fatto

  • Ho cercato su Internet per ore.
  • Roba modificata e riavviata, spesso.
  • Finalmente rmho appena aggiunto tutte le cose di avvio automatico relative a SSH.

L'ultima cosa ha funzionato magicamente in quanto non c'è più il socket per l'agente lì:

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

Problema

Il problema che rimane è che , nonostante la mia ottenere il meraviglioso risultato di cui sopra, qualcosa in gnome-keyringancora insiste su come impostare SSH_AUTH_SOCKal momento inesistente presa sopra. È come gli zombi, queste cose non muoiono mai.

Domanda

Cosa sta impostando quella variabile e dove viene eseguita?

insidie

  • Io non chiedo come posso ripristinare quella variabile ad un altro valore.
  • Io non chiedo come posso impostare il valore a livello di sistema o in un file di configurazione della shell.
  • Io non chiedo per alcuni incantesimi init-script voodoo per congelare, insieme, di reset, non impostato o sostituire nulla.
  • Io non chiedendo consiglio su come disinstallare la cosa: ho ancora bisogno per le mie password e sembra essere il gestore di password più integrato e lucidato in Gnome.

Voglio quella cosa disabilitata come dovrebbe essere.


2
Disinstallare gnome-keyring?
Rudimeier,

1
@rudimeier: ho ancora bisogno del portachiavi di gnome per le mie password e per quanto ne so non c'è niente di più raffinato e integrato in Gnome.
Giovanni

@rudimeier anche questo non sembra aiutare. L'ho provato
André Borie,

Risposte:


8

Fammi indovinare, stai usando Wayland. Oggi ho riscontrato questo problema e ho pensato di condividere la soluzione.

Gnome-Session ha un SSH_AUTH_SOCKovercide hardcoded per underwayland per qualche motivo. Vedi il seguente commit: https://github.com/GNOME/gnome-session/commit/a8896ccad65583885735a04205351f48a42f29ae

La soluzione alternativa? Impostare una variabile d'ambiente per disattivare questo comportamento: GSM_SKIP_SSH_AGENT_WORKAROUND=1. Ciò cortocircuita il codice di impostazione ambientale.

Per le persone che trovano questo che stanno anche provando a configurare ssh-agent: Nel mio file di unità di sistema per ssh-agent, ho la seguente riga:

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

Il file completo è simile al seguente:

[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

Grazie! Su Ubuntu v17.10 Artful Aardvark, semplicemente aggiungendo export GSM_SKIP_SSH_AGENT_WORKAROUND=1al mio ~ / .profile e riavviando riparato la mia configurazione che precedentemente funzionava su v17.04.
Stephen Niedzielski,

Questo sembra influenzare molto più di Wayland, mi sono imbattuto in questo quando ho provato a usare gnome-flashback + i3.
dragon788,

Nota che l'hacking funziona fino a Gnome 3.24 o precedente ( wiki.archlinux.org/index.php/GNOME/… )
Pablo Olmos de Aguilera C.

5

(L'ambiente OP non è noto, quindi i percorsi indicati qui sono quelli trovati sulla mia macchina Ubuntu)

Dove gnome-keyring imposta SSH_AUTH_SOCK?

Per rispondere alla domanda principale nel titolo, SSH_AUTH_SOCK è impostato da gnome-keyring /usr/share/upstart/sessions/gnome-keyring-ssh.confcon il seguente comando:

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

Citando il initctlmanuale:

initctl set-env VARIABLE[=VALUE]

Aggiunge o aggiorna una variabile in una tabella dell'ambiente di lavoro. Le variabili impostate in questo modo si applicheranno a tutti i processi che iniziano successivamente per un lavoro.

-g, --global

Operare sulla tabella dell'ambiente di lavoro globale e su tutte le tabelle dell'ambiente di lavoro in esecuzione esistenti.

Da dove viene SSH_AUTH_SOCK in primo luogo?

Il initctlcomando sopra è condizionato al fatto che la variabile di ambiente SSH_AUTH_SOCK esiste già. Quindi, è una situazione di pollo e uova? Cosa lo imposta?

SSH_AUTH_SOCK è inizialmente impostato dall'agente ssh originale che viene avviato all'inizio della sessione X. Citando il manuale:

Viene creato un socket di dominio UNIX e il nome di questo socket viene archiviato nella SSH_AUTH_SOCKvariabile di ambiente. Il socket è reso accessibile solo all'utente corrente.

MA, ciò che fa il componente ssh dello gnome-keyring è sostituirsi all'agente ssh esistente. Pertanto sovrascrive SSH_AUTH_SOCK con il proprio socket in /run/user/.../keyring-.../sshmodo che le applicazioni parlino con esso e non con ssh-agent.

Come disabilitarlo

Ora, rispondiamo all'ultima frase "Voglio che quella cosa sia disabilitata". Ciò che l'OP vuole è disabilitare la sovrascrittura di SSH_AUTH_SOCK da parte del componente ssh in gnome-keyring. Vogliono recuperare la "vera" variabile SSH_AUTH_SOCK inizialmente impostata da ssh-agent.

Il componente ssh viene avviato dallo stesso script di avvio menzionato sopra ( /usr/share/upstart/sessions/gnome-keyring-ssh.conf) ma a una condizione: la stringa X-GNOME-Autostart-enabled=falsenon deve essere trovata in nessuno di questi file:

  • (conf a livello di sistema) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (conf. utente) ~/.config/autostart/gnome-keyring-ssh.desktop

Pertanto, se si desidera disabilitarlo, è sufficiente aggiungere una riga X-GNOME-Autostart-enabled=falsea uno di questi file, preferibilmente quello nella directory HOME.


Ho provato a disabilitare le voci di avvio automatico per il portachiavi Gnome e sembra che la variabile sia ancora lì, ma punta a un socket inesistente (quindi disabilitando il portachiavi ha funzionato, ma la variabile è impostata altrove). Sto usando una macchina Archlinux, quindi non c'è avvio e non c'è nulla di ovvio in systemd che imposti la variabile ..
André Borie,

@ AndréBorie Non conosco né Arch né systemd. Qual è il nuovo valore del percorso socket? Sul mio macihne, l'agente ssh in genere lo imposta su /tmp/ssh-XXX/agent.PID. Ssh-agent è ancora nell'elenco dei processi?
xhienne,

Il percorso è proprio come nella domanda originale. Non ci sono agenti SSH né portachiavi in ​​esecuzione.
André Borie,

Questa risposta è davvero vecchia ma spero che tu possa aiutarmi anche unix.stackexchange.com/questions/422574/…
Ojs

3

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

Se si desidera eseguire un agente SSH alternativo (ad esempio ssh-agent o gpg-agent, è necessario disabilitare il componente ssh di GNOME Keyring. Per farlo in un modo account-locale:

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

Quindi disconnettersi.

Leggermente modificato, rimuovendo l'uso apparentemente inutile di printf


Questo funziona anche per me su Ubuntu 14.04.
punti

Questo è vero per 3.24 e successivi.
Pablo Olmos de Aguilera C.

0

A partire da Gnome 3.18, il socket sembra essere memorizzato in ~/.cache/keyring-(some random string)/ssh

A indovinare, è stato impostato da gnome-keyring-daemon.

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.