Magit, come usare l'agente ssh di sistema e non chiedere la password


19

Ho cercato su Google e letto le FAQ e Wiki per Magit, ma non riesco ancora a capirlo, tutto quello che trovo sono le risposte su Windows ...

Come posso configurare Magit per usare la mia sessione ssh-agent in esecuzione e non chiedere la mia password quando faccio un push.

Sto eseguendo Linux e ho l'avvio ssh-agent con il mio terminale e quindi sblocco la mia chiave, il che mi permette di fare git push, ecc. Senza farmi inserire la password ogni volta.

Env:
Arch Linux
Emacs 24.4

ssh-agent con le chiavi aggiunte, per sbloccare il primo terminale aperto.

EDIT: intendevo usare passphrase, sai per il tasto ssh, et al.
E sto spingendo su Bitbucket, ma credo che il problema chiave sia che Magit non stia parlando / riconoscendo il mio agente ssh.
Forse c'è qualche configurazione da impostare, per dirlo che lo sto eseguendo ??


In realtà è arrivata la stessa domanda.
emacsomancer

Qual è l'URL remoto? http: // o git: //?
Nsukami _

git@bitbucket.org in questo caso, impostare in questo modo: url = git@bitbucket.org:
Andres

Puoi dirci cosa restituisce Emacs quando lo fai M-x getenv SSH_AGENT_PID? M-x getenv SSH_AUTH_SOCK
Nsukami _

SSH_AGENT_PID = 602 SSH_AUTH_SOCK = /tmp/ssh-13kI6AaYvgji/agent.601
Andres

Risposte:


13

Bene, questo si è rivelato più una tana del coniglio di quanto pensassi ... E per quello che posso raccogliere non c'è una soluzione migliore per questo problema specifico, con questa combinazione di desktop, ssh-agent, emacs.

Problema 1
XFCE stava avviando il proprio agente ssh con la sessione, senza dirlo da nessuna parte, il che ha causato al sistema 1 agente ssh globale inutilizzato e il mio agente sbloccato specifico della shell.
Su un DE diverso potresti eseguire lo stesso problema e dovrai trovare i dettagli per disabilitare l'avvio automatico dell'agente.

Soluzione 1
Eseguire questo comando per disabilitare l'esecuzione dell'agente ssh-agent

xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false

Problema 2
Ora Emacs non ha alcuna variabile SSH_AGENT_PID e SSH_AUTH_SOCK impostata, quindi nulla sull'ambiente caricato. Ovviamente Magit richiede ancora la chiave in quanto non è a conoscenza del nuovo agente ssh che abbiamo avviato.

Soluzione 2
Dobbiamo fare in modo che Emacs recuperi queste nuove variabili dall'ambiente, ma ovviamente non c'è modo semplice.
Immettere: exec-path-from-shell che consente di recuperare variabili di ambiente dalla shell. Così.

  1. Installa il pacchetto exec-path-from-shell nel modo che preferisci.
  2. Aggiungi il seguente codice a init.el in modo che si carichi all'avvio di Emacs.

(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")

Grazie ragazzi per il suggerimento di guardare le variabili SSH _ **, che mi hanno indicato la giusta direzione.


Qualche motivo particolare per cui non sei soddisfatto dell'agente di XFCE e vuoi gestirlo da solo? L'abbandono sembrerebbe la soluzione più semplice.
Tripleee

Non eseguo sempre XFCE, né mi interessa come lo gestisce il desktop, preferisco il plugin che lo gestisce da oh-my-zsh. Quindi è più facile per me saltare il caso d'uso predefinito. (scontato, non so quasi abbastanza sull'agente ... ma non è qualcosa a cui voglio davvero passare del tempo a pensare comunque)
Andres

Forse Zsh dovrebbe riconoscere il caso in cui un agente è già in esecuzione e rimandare invece a quello; ma ovviamente, questo sta diventando fuori tema qui.
Tripleee

1
Forse ssh-agency dovrebbe essere estesa per funzionare anche su sistemi unix-like.
npostavs,

7

Un'altra soluzione per i pigri è semplicemente usare un pacchetto che gestisca esattamente questo caso (impostando le variabili d'ambiente relative al portachiavi di Emacs):

  1. Installa e aggiungi al pacchetto init.el keychain-environment .
  2. Esegui M-x keychain-refresh-environmente ora dovrebbe funzionare.
  3. Inserisci (keychain-refresh-environment)in init.el, in modo che la soluzione funzioni dopo il riavvio di Emacs

E questo è tutto, supponendo che il tuo ssh-agent sia configurato e funzionante.

Descrizione davvero buona, dal commento del pacchetto:

Keychain è uno script che gestisce ssh-agent e gpg-agent. In genere viene eseguito dal file di inizializzazione della shell. Permette alle tue shell e ai lavori cron di condividere un singolo agente ssh e / o agente gpg.

Quando il portachiavi viene eseguito, verifica l'esecuzione dell'agente, altrimenti li avvia. Salva le variabili di ambiente degli agenti in file all'interno di ~ / .keychain /, in modo che le shell successive possano generare questi file.

Quando Emacs viene avviato in X11 e non direttamente da un terminale, queste variabili non vengono impostate. Questa libreria cerca questi file creati dal portachiavi e quindi imposta le variabili di ambiente di Emacs di conseguenza. In realtà non esegue il portachiavi, quindi devi prima eseguirlo da una shell di accesso.

Per usare esegui la funzione `keychain-refresh-environment 'nel tuo file init. Se il portachiavi non è stato ancora eseguito all'avvio di Emacs, puoi anche chiamare in modo interattivo quella funzione.

Vedi anche: http://www.funtoo.org/wiki/Keychain


1
Questo è esattamente ciò di cui avevo bisogno poiché lo uso già keychain.
xji,

1

FWIW, keychainora ha un --systemdinterruttore, che inietterà le variabili nell'ambiente utente systemd.

La soluzione più semplice che ho trovato è stata quella di aggiungere eval "$(keychain --eval --quiet --noask --systemd keys...)"uno script eseguito dall'unità systemd per avviare il server Emacs.

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.