Poszukałem go i przeczytałem FAQ i Wiki dla Magit, ale nadal nie mogę tego rozgryźć, wszystko, co znajduję, to odpowiedzi na temat systemu Windows ...
Jak mogę skonfigurować Magit, aby używał mojej działającej sesji agenta ssh i nie pytał o hasło podczas wypychania.
Korzystam z systemu Linux i uruchamiam ssh-agent z moim terminalem, a następnie odblokowuję klucz, co pozwala mi wykonywać polecenia git push itp. Bez konieczności wprowadzania hasła za każdym razem.
Env:
Arch Linux
Emacs 24.4
ssh-agent z dodanymi kluczami, aby odblokować pierwszy terminal otwarty.
EDYCJA: Miałem na myśli użycie hasła, wiesz o kluczu ssh i wsp.
Naciskam na Bitbucket, ale uważam, że kluczowym problemem jest to, że Magit nie mówi / nie rozpoznaje mojego agenta ssh.
Może jest jakaś konfiguracja, żeby powiedzieć, że ją uruchamiam?
M-x getenv SSH_AGENT_PID
?M-x getenv SSH_AUTH_SOCK
Odpowiedzi:
Cóż, okazało się, że jest to raczej królicza nora niż myślałem ... I dla tego, co mogę zebrać, nie ma lepszego rozwiązania tego konkretnego problemu, z tym połączeniem pulpitu, ssh-agent, emacs.
Problem 1
XFCE uruchamiał własnego ssh-agenta z sesją, nie mówiąc o tym nigdzie, co spowodowało, że system miał 1 nieużywany globalny ssh-agent, a mój agent specyficzny dla powłoki był odblokowany.
W innym języku DE możesz działać z tym samym problemem i musisz znaleźć szczegółowe informacje, aby wyłączyć automatyczne uruchamianie agenta.
Rozwiązanie 1
Uruchom to polecenie, aby wyłączyć uruchamianie ssh-agent uruchamiania
xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false
Problem 2
Teraz Emacs nie ma żadnych ustawionych zmiennych SSH_AGENT_PID i SSH_AUTH_SOCK , więc nic w załadowanym środowisku. Oczywiście Magit wciąż prosi o klucz, ponieważ nie wie o nowym ssh-agencie, który uruchomiliśmy.
Rozwiązanie 2
Musimy sprawić, aby Emacs pobierał te nowe zmienne ze środowiska, ale oczywiście nie ma prostej drogi.
Wpisz: exec-path-from-shell, która pozwala pobrać zmienne środowiskowe z powłoki. Więc.
(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")
Dzięki chłopaki za sugestię dotyczącą spojrzenia na zmienne SSH _ **, która wskazała mi właściwy kierunek.
źródło
Innym rozwiązaniem dla leniwych jest po prostu użycie pakietu, który obsługuje dokładnie ten przypadek (ustawienie zmiennych środowiskowych związanych z pękiem kluczy Emacsa):
M-x keychain-refresh-environment
i teraz powinno działać.(keychain-refresh-environment)
w pliku init.el, aby rozwiązanie działało po ponownym uruchomieniu EmacsaI to wszystko, zakładając, że Twój ssh-agent jest skonfigurowany i uruchomiony.
Naprawdę dobry opis, z komentarza pakietu:
źródło
keychain
.FWIW,
keychain
teraz ma--systemd
przełącznik, który wstrzykuje zmienne do systemowego środowiska użytkownika.Najprostszym rozwiązaniem, jakie znalazłem, było dodanie
eval "$(keychain --eval --quiet --noask --systemd keys...)"
do skryptu uruchamianego z jednostki systemd w celu uruchomienia serwera Emacs.źródło