2017-02-09 13 views
3

emacs를 systemd 사용자 서비스로 서버 모드에서 실행 중이며 magit을 사용하여 pubkey 인증 원격 저장소에서 가져 오려고합니다. 불행히도, magit (또는 자식 프로세스)는 이미로드 된 공개 키를 사용할 수 없습니다. 분명히, 나는 이맥스 맥락에서 내 ssh-agent에 연결할 수 없다. 이맥스 내에서서버 모드에서 emacs의 ssh 에이전트 사용하기

실행 :

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

그 문제를 해결하기 위해 또는 내가 ssh를 에이전트와 클라이언트가 실제로 통신하는 방법을 파고해야합니까 알려진 방법이 있나요?

+0

'ssh를-agent' 시작될 때 일부 환경 변수 (소스 쉘 스크립트 형식)를 출력합니다. 해당 에이전트가 여전히 실행 중이고 해당 설정을 읽을 수있는 파일로 작성한 경우 해당 값을 사용자 환경으로 읽음으로써 해당 에이전트에 연결할 수 있어야합니다. 직접 관리하거나 [keychain] (https://linux.die.net/man/1/keychain)과 같은 것을 사용할 수 있습니다. – phils

답변

2

ssh-agent는 사용하려는 프로세스의 상위 프로세스에서 실행 중이어야합니다. 이것이 종종 창 관리자를위한 설정의 일부로 시작되는 이유입니다. 창 관리자의 모든 하위 프로세스, 즉 사용자가 실행하는 터미널과 프로그램은 ssh-agent를 사용할 수 있습니다.

경우에 따라 emacs를 시작하는 systemd 사용자 서비스에서 ssh-agent를 부모 프로세스로 실행할 수 있지만 물론 에이전트가 다른 용도 (예 : wm에서 열리는 터미널에서 작동하지 않음) .

2

저는 keychain을 사용하여 ssh-agent를 관리합니다. 에이전트를 시작하고 관련 매개 변수 (에이전트 PID 및 소켓)를 쉘이 제공 할 수있는 스크립트로 덤프합니다. 이것을 Emacs 패키지 keychain-environment으로 가져 와서 Emacs로 가져올 수 있습니다.

~/.bashrc에 :

# keychain keeps track of ssh-agents 
[ -f $HOME/.keychain/$HOSTNAME-sh ] \ 
    && . $HOME/.keychain/$HOSTNAME-sh 

~/.bash_profile에 :

# keychain manages ssh-agents 
type keychain >&/dev/null \ 
    && keychain --agents ssh 

~/.emacs.d/init.el :

(require 'keychain-environment) 
(keychain-refresh-environment)