Magit, 시스템의 ssh 에이전트를 사용하고 비밀번호를 요구하지 않는 방법


19

Google에서 Magit에 대한 FAQ와 Wiki를 읽었지만 여전히 알아낼 수는 없지만 Windows에 대한 답변 만 있습니다 ...

실행중인 ssh-agent 세션을 사용하고 푸시를 수행 할 때 비밀번호를 묻지 않도록 Magit을 구성하는 방법

나는 리눅스를 실행 중이며 터미널에서 ssh-agent를 시작하고 키를 잠금 해제하면 매번 암호를 입력하지 않고도 git push 등을 수행 할 수 있습니다.

환경 :
아치 리눅스
이맥스 24.4

키가 추가 된 ssh-agent는 처음 열린 터미널에서 잠금을 해제합니다.

편집 : 암호를 사용하는 것을 의미했습니다 .ssh 키 등을 알고 있습니다.
그리고 Bitbucket을 추진하고 있지만 중요한 문제는 Magit이 ssh-agent를 말하거나 인식하지 못한다는 것입니다.
어쩌면 내가 실행 중임을 알리기 위해 설정이있을 수 있습니다.


실제로 같은 질문이 왔습니다.
emacsomancer

원격 URL은 무엇입니까? http : // 또는 git : //?
Nsukami _

이 경우 git@bitbucket.org, 다음과 같이 설정하십시오 : url = git@bitbucket.org :
Andres

당신이 할 때 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

답변:


13

글쎄, 이것은 나보다 토끼 구멍이 더 많은 것으로 밝혀졌습니다 ... 그리고 내가 수집 할 수있는 것은이 특정 문제에 대한 더 나은 해결책이 아닙니다.이 데스크탑, ssh-agent, emacs의 조합입니다.

문제 1
XFCE는 실제로 아무데도 말하지 않고 세션을 사용하여 자체 ssh-agent를 시작하여 시스템에 사용되지 않은 전역 ssh-agent 1 개와 쉘 특정 잠금 해제 에이전트가 생겼습니다.
다른 DE에서는 동일한 문제로 실행될 수 있으며 에이전트 자동 시작을 비활성화하려면 특정 사항을 찾아야합니다.

해결 방법 1
시작 ssh-agent가 실행되지 않도록하려면이 명령을 실행하십시오.

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

문제 2
이제 Emacs에 SSH_AGENT_PIDSSH_AUTH_SOCK 변수가 설정 되지 않았 으므로로드 된 환경에는 아무것도 없습니다. 분명히 Magit은 우리가 시작한 새로운 ssh 에이전트 에 대해 알지 못하므로 여전히 키를 요구합니다 .

해결 방법 2
Emacs가 환경에서 이러한 새로운 변수를 가져와야하지만 당연히 직접적인 방법은 없습니다. 에서 환경 변수를 페치 할 수있는 exec-path-from-shell
입력하십시오 . 그래서.

  1. 설치 간부-경로에서 쉘 원하는 방식으로 패키지를.
  2. Emacs를 시작할 때로드 되도록 다음 코드를 init.el에 추가하십시오 .

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

SSH _ ** 변수를 살펴 보는 것에 대한 제안에 감사드립니다.


XFCE의 에이전트에 만족하지 않고 직접 실행하고 싶은 특별한 이유가 있습니까? 그것을 포기하면 더 간단한 해결책처럼 보일 것입니다.
tripleee

나는 항상 XFCE를 실행하는 것은 아니며 데스크탑이 어떻게 그것을 관리하는지에 관심이 없으며 oh-my-zsh에서 그것을 처리하는 플러그인을 선호합니다. 따라서 기본 사용 사례를 건너 뛰는 것이 더 쉽습니다. (나는 에이전트에 대해 거의 알지 못하지만 ... 어쨌든 내가 생각하는 시간을 정말로 보내고 싶지는 않습니다)
Andres

Zsh는 에이전트가 이미 실행중인 경우를 인식하고 대신 연기해야합니다. 그러나 분명히, 이것은 여기서 주제를 벗어납니다.
tripleee

1
아마도 유닉스 계열 시스템에서도 ssh-agency 를 확장해야 할 수도 있습니다.
npostavs

7

게으른 다른 해결책은 정확히이 경우를 처리하는 패키지를 사용하는 것입니다 (Emacs의 키 체인 관련 환경 변수 설정).

  1. init.el 패키지 키 체인 환경 을 설치하고 추가하십시오 .
  2. 실행 M-x keychain-refresh-environment하면 이제 작동합니다.
  3. 장소 (keychain-refresh-environment)당신의 init.el에서, 이맥스를 다시 시작한 후 솔루션 작품 때문에

그리고 ssh-agent가 구성되어 실행되고 있다고 가정합니다.

패키지의 의견에서 정말 좋은 설명 :

키 체인은 ssh-agent 및 gpg-agent를 관리하는 스크립트입니다. 일반적으로 쉘의 초기화 파일에서 실행됩니다. 쉘 및 크론 작업이 단일 ssh-agent 및 / 또는 gpg-agent를 공유 할 수 있습니다.

키 체인이 실행될 때 에이전트 실행을 확인하고 그렇지 않으면 시작합니다. 에이전트의 환경 변수를 ~ / .keychain / 내의 파일에 저장하여 후속 쉘이 이러한 파일을 소싱 할 수 있도록합니다.

X11에서 Emacs가 시작되고 터미널에서 직접 시작되지 않으면이 변수는 설정되지 않습니다. 이 라이브러리는 키 체인으로 생성 된 파일을 찾은 다음 그에 따라 Emacs의 환경 변수를 설정합니다. 실제로 키 체인을 실행하지는 않으므로 여전히 로그인 쉘에서 키 체인을 실행해야합니다.

사용하려면 init 파일에서`keychain-refresh-environment '기능을 실행하십시오. Emacs를 시작할 때 키 체인이 아직 실행되지 않은 경우 나중에 해당 기능을 대화식으로 호출 할 수도 있습니다.

참조 : http://www.funtoo.org/wiki/Keychain


1
이것은 내가 이미 사용했기 때문에 필요한 것 keychain입니다.
xji

1

FWIW에는 keychain이제 --systemd스위치 가 있으며 시스템 사용자 환경에 변수를 주입합니다.

내가 찾은 가장 간단한 해결책 eval "$(keychain --eval --quiet --noask --systemd keys...)"은 시스템 단위에서 실행 된 스크립트 에 추가 하여 Emacs 서버를 시작하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.