Pośpiesz się, jak używać systemowego agenta ssh i nie pytaj o hasło

19

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?

Andres
źródło
Właściwie przyszło z tym samym pytaniem.
emacsomancer
Co to jest zdalny adres URL? http: // czy git: //?
Nsukami _
[email protected] w tym przypadku, skonfiguruj tak: url = [email protected]:
Andres
Czy możesz nam powiedzieć, co powraca Emacs 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

Odpowiedzi:

13

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.

  1. Zainstaluj pakiet exec-path-from-shell w preferowany sposób.
  2. Dodaj następujący kod do pliku init.el, aby ładował się po uruchomieniu Emacsa.

(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.

Andres
źródło
Czy jest jakiś szczególny powód, dla którego nie jesteś zadowolony z agenta XFCE i chcesz uruchomić własny? Porzucenie tego wydawałoby się prostszym rozwiązaniem.
tripleee
Nie zawsze uruchamiam XFCE, ani nie dbam o to, jak komputer zarządza nim, wolę wtyczkę, która obsługuje go od oh-my-zsh. Łatwiej jest mi więc pominąć domyślny przypadek użycia. (oczywiście, że nie wiem wystarczająco dużo o agencie ... ale tak naprawdę nie chcę spędzać czasu na myśleniu)
Andres
Może Zsh powinien rozpoznać przypadek, gdy agent już działa, i zamiast tego odłożyć na bok; ale to oczywiście nie wchodzi w grę.
tripleee
1
Być może ssh-agency powinno zostać rozszerzone również na systemy uniksopodobne.
npostavs
7

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):

  1. Zainstalować i dodać do swojej init.el pakietu pęku kluczy-środowiskowych .
  2. Uruchom M-x keychain-refresh-environmenti teraz powinno działać.
  3. Umieść (keychain-refresh-environment)w pliku init.el, aby rozwiązanie działało po ponownym uruchomieniu Emacsa

I to wszystko, zakładając, że Twój ssh-agent jest skonfigurowany i uruchomiony.

Naprawdę dobry opis, z komentarza pakietu:

Keychain to skrypt zarządzający ssh-agent i gpg-agent. Zwykle jest uruchamiany z pliku inicjalizacji powłoki. Pozwala twoim powłokom i zadaniom cron współdzielić jednego agenta ssh i / lub agenta gpg.

Po uruchomieniu pęku kluczy sprawdza, czy działa agent, w przeciwnym razie je uruchamia. Zapisuje zmienne środowiskowe agentów w plikach wewnątrz ~ / .keychain /, dzięki czemu kolejne powłoki mogą je pozyskiwać.

Kiedy Emacs jest uruchamiany pod X11, a nie bezpośrednio z terminala, te zmienne nie są ustawione. Ta biblioteka szuka plików utworzonych przez keychain, a następnie odpowiednio ustawia zmienne środowiskowe Emacsa. W rzeczywistości nie uruchamia pęku kluczy, więc najpierw musisz uruchomić go z powłoki logowania.

Aby użyć, uruchom funkcję `keychain-refresh-environment 'w swoim pliku init. Jeśli pęku kluczy nie uruchomiono jeszcze podczas uruchamiania Emacsa, możesz później wywołać tę funkcję interaktywnie.

Zobacz także: http://www.funtoo.org/wiki/Keychain

tlegutko
źródło
1
Właśnie tego potrzebowałem, ponieważ już używam keychain.
Xji
1

FWIW, keychainteraz ma --systemdprzełą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.

Vladimir Panteleev
źródło