xubuntu: stop gnome-keyring-daemon dalla rappresentazione di ssh-agent

Voglio usare il vero ssh-agent invece di gnome-keyring in xubuntu. Ho seguito i passaggi da http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204 , ma il keyring di gnome si registra ancora come ssh-agent. Voglio continuare a utilizzare gnome-keyring per altre password

Si scopre che se la compatibilità di gnome è triggersta in xfce, xfce4-session avvierà incondizionatamente gnome-keyring-daemon. Questo è hardcoded, al momento non c’è modo di configurarlo. Disabilitando la modalità di compatibilità di gnome, il keyring non si avvia all’accesso e sarà necessario fornire nuovamente la password se la si avvia.

La soluzione più semplice sembra essere quella di intercettare la chiamata a gnome-keyring-daemon e inserire uno script che inserirà il flag --components negli argomenti per impedire a gnome keyring di sostituire ssh-add.

Esegui quanto segue per spostare gnome-keyring-daemon:

 sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-wrapped 

crea un nuovo demone-portachiavi gnome con

 sudo nano /usr/bin/gnome-keyring-daemon 

e inserire il seguente contenuto:

 #!/bin/sh exec /usr/bin/gnome-keyring-daemon-wrapped --components=pkcs11,secrets,gpg "[email protected]" 

Crea il nuovo eseguibile gnome-keyring-daemon con sudo chmod +x /usr/bin/gnome-keyring-daemon .

Ora il portachiavi gnome non tenterà più di sostituire ssh-add.

Si noti che l’aggiornamento del sistema ripristinerà il default demone-keyring-daemon, quindi sarà probabilmente necessario eseguire nuovamente i passaggi precedenti dopo l’aggiornamento.

modificare:

In xubuntu 14.10 l’avvio funziona in modo leggermente diverso in quanto gkd viene avviato anche dalla sessione upstart. È ansible sovrascrivere la configurazione di upstart in modo che non avvii il componente ssh, ma anche in questo caso gkd avvierà il suo componente ssh quando xfce4-session tenta anche di avviarlo. Quindi, se vuoi che xfce avvii automaticamente anche i servizi di gnome, avrai ancora bisogno del trucco precedente. Un’alternativa è disabilitare i servizi di gnome (Setings -> Session and Startup -> advanced -> Avvia i servizi di GNOME all’avvio), configura upstart per avviare gkd con --components=pkcs11,secrets,gpg flag, e opzionalmente anche configure the gnome servizi che si desidera avviare manualmente.

(A parte le due posizioni che lanciano gkd menzionato sopra, anche il demone gk viene avviato prima da lightdm / PAM per ricevere la password di accesso dell’utente, ma tale avvio non configura completamente gkd e si aspetta comunque di essere completamente configurato da un secondo tentativo di avviarlo, in modo che il tentativo di avvio non sia rilevante per il problema corrente).

Per build la risposta di @JanKanis, ho rintracciato che xfce4-session è il colpevole per l’avvio del comando gnome-keyring-daemon – start.

Quando viene eseguito in questo modo, gnome-keyring-daemon non verifica che sia già impostato SSH_AUTH_SOCK, che è una “funzione”, dal momento che è ansible avere sia ssh-agent che gnome-keyring-daemon che forniscono un socket.

Cominciando dall’inizio:

Aggiungi ~/.config/upstart/gnome-keyring.conf :

 description "GNOME Keyring agents" author "Dimitri John Ledkov " start on (starting xsession-init or starting ssh-agent or starting gpg-agent) and started dbus task script # Stop because I say so stop; exit 0 eval "$(gnome-keyring-daemon --start)" >/dev/null initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK initctl set-env --global GPG_AGENT_INFO=$GPG_AGENT_INFO end script 

Ora sostituisci gnome-keyring-daemon con un wrapper (ho spostato l’originale in / usr / libexec /):

 #!/bin/sh gkd=/usr/libexec/gnome-keyring-daemon debug=1 log=${XDG_CACHE_HOME:-"${HOME}/.cache"}/gkd.log if [ ${debug} -gt 0 ] then echo "================" >> ${log} echo "Invoked as $0 [email protected]" >> ${log} echo "================" >> ${log} /usr/bin/pstree -lag >> ${log} fi case "[email protected]" in *--start*) $gkd --components=pkcs11,secrets,gpg "[email protected]" ;; *) $gkd "[email protected]" ;; esac if [ ${debug} -gt 0 ] then /usr/bin/pstree -lag >> ${log} fi 

Il codice di debug è lì per te per capire perché ha smesso di funzionare. Dato che nessuno di questi programmi ha metodi di configurazione sane, non vi è alcun modo per aggirare i comandi di hacking. In questo caso, non riesco a trovare alcun metodo di configurazione documentato per xfce4-session per non envoke gnome-keyring-daemon – start, che non ha altri effetti collaterali. Fanno tutti delle assunzioni su cose che vengono installate e quindi vanno avanti leggendo la mente dell’utente.

È un thread vecchio, ma la mia soluzione per questo problema su Xubuntu 14.04 è semplice semplicemente riaprendo gnome-keyring-daemon su Session and Startup. Quello che devi fare è semplicemente eseguire il comando qui sotto:

 $ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg 

Rimuoviamo “ssh” dal componente del portachiavi Gnome.

  1. Vai a Menu> Impostazioni> Sessione e avvio
  2. Fai clic sulla scheda Avvio automatico dell’applicazione
  3. Fai clic sul pulsante Aggiungi
  4. Apparirà la nuova finestra dell’applicazione, puoi riempirla come nell’esempio seguente
    1. Nome : SSH Remover per portachiavi
    2. Descrizione : Rimuovi SSH dal portachiavi GNOME
    3. Comando : gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
  5. Clicca OK

Prova a disconnettere la tua sessione XFCE e accedi nuovamente. Per essere sicuri che il portachiavi di Gnome non gestisca più ssh, basta eseguire.

 $ ssh-add -l Could not open a connection to your authentication agent. 

Se hai quel messaggio significa che il portachiavi di Gnome non gestisce il tuo SSH e sei libero di usare l’implementazione originale ssh-agent di OpenSSH.

Ecco una versione meno invasiva della sceneggiatura pubblicata da JanKanis. Accetta tutti i componenti che sono stati passati ad esso, ma strappa il componente SSH.

 #!/bin/bash ARGS="[email protected]" COMPONENTS="" if [[ $ARGS =~ \-\-components= ]]; then component_match_expression='(\-\-components=([0-9a-z,]+))' COMPONENTS=$(echo $ARGS | grep -oP "$component_match_expression") ARGS=$(echo $ARGS | sed -E "s/$component_match_expression//") COMPONENTS="--components=$(echo $COMPONENTS | grep -oP '(?<=\-\-components=)([0-9a-z,]+)' | sed -e 's/ssh//' -e 's/,,/,/')" if [ "$COMPONENTS" != "--components=" ]; then ARGS="$ARGS $COMPONENTS" else exit 0 fi fi /usr/bin/gnome-keyring-daemon-wrapped $ARGS 

Ho appena riscontrato questo problema su Xubuntu 16.04 e anch’io volevo che ssh-agent e gpg-agent funzionassero.

In primo luogo, non mi importava di gnome-keyring, quindi ho rimosso tutti i pacchetti correlati. per esempio.

 sudo dpkg -P libgnome-keyring-common libgnome-keyring0 libp11-kit-gnome-keyring libpam-gnome-keyring libgnomeui-0 python-gnome2 gir1.2-gnomekeyring-1.0 system-config-printer-gnome 

A questo punto ssh-agent e gpg-agent sono stati entrambi in esecuzione, ma gpg non è riuscito a connettersi a gpg-agent causa di $GPG_AGENT_INFO non impostato. Questo è davvero strano perché se guardiamo in /etc/X11/Xsession.d/90gpg-agent è chiaramente impostato inizialmente. Qualcosa deve essere disassociato.

Per aiutare a trovare il colpevole ho creato un file di sessione personalizzato:

 $ cat /usr/share/xsessions/xsession.desktop [Desktop Entry] Version=1.0 Name=Xsession Exec=/etc/X11/Xsession Icon= Type=Application 

Ho quindi creato un file personalizzato ${HOME}/.xsession e l’ho reso eseguibile, con qualcosa di simile al seguente:

 #!/bin/sh # DEBUG echo "GPG_AGENT_INFO: ${GPG_AGENT_INFO}" > "${HOME}/GPG_AGENT_INFO" # Defined by /etc/alternatives/x-session-manager exec x-session-manager 

Ho effettuato il logout, riavviato lightdm ed effettuo nuovamente l’accesso (con la sessione “Xsession” selezionata) e ispezionato ${HOME}/GPG_AGENT_INFO . Abbastanza sicuro, la variabile di ambiente era ancora impostata. Quindi era qualcosa di stupido Xfce4 stava facendo.

Giocherellando, alla fine mi sono imbattuto in questo:

 $ strings /usr/bin/xfce4-session | grep gpg /startup/gpg-agent/enabled gpg-agent gpg-agent-info GNOME compatibility is enabled and gnome-keyring-daemon is found on the system. Skipping gpg/ssh-agent startup. gpg-agent is configured as SSH agent, but gpg-agent is disabled or not found Failed to kill gpg-agent with pid %d $ 

Sembra che xfce4-session stia probabilmente disabilitando la variabile quando tenta di lanciare gnome-keyring-daemon , quindi la soluzione richiede due passaggi. Per prima cosa, vai su Applications -> Settings -> Session and Startup -> Advanced e spunta Launch GNOME services on startup . Quindi, crea un file eseguibile chiamato gnome-keyring-daemon da qualche parte nel tuo $PATH con i seguenti contenuti:

 #!/bin/sh # # This script exists to satisfy an XFCE4 check which prevents # the GPG_AGENT_INFO environment variable getting unset. 

Disconnettiti e ancora una volta, e dovresti essere ordinato. Dovresti anche essere in grado di eliminare /usr/share/xsessions/xsession.desktop e ${HOME}/.xsession se hai creato anche quelli, poiché erano solo per il debug.