2017-02-09 8 views
3

私はemacsをシステムモードのユーザサービスとしてサーバモードで実行しており、magitを使ってpubkey認証のリモートリポジトリからpullしたいと思っています。残念ながら、magit(またはgitの子プロセス)はすでに読み込まれている公開鍵を使用できません。明らかに、私はemacsの文脈の中から自分のssh-agentに接続できません。 emacsの中からサーバモードでemacsのsshエージェントを使用する

ラン:

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

その問題を解決するか、私はssh-agentのクライアントが実際にどのように通信するかを掘り下げなければならないの既知の方法はありますか?

+0

'SSH-agent'起動時に(ソース可能なシェルスクリプトの形で)いくつかの環境変数を出力します。そのエージェントがまだ実行中で、それらの設定を読み取り可能なファイルに書き込んだ場合、その値を環境内に読み込んでそのエージェントに接続できるはずです。あなた自身で管理することも、[keychain](https://linux.die.net/man/1/keychain)のようなものを使うこともできます。 – phils

答えて

2

ssh-agentは、使用するプロセスの親プロセスで実行している必要があります。これが、ウィンドウマネージャのセットアップの一部として開始されることが多い理由です。ウィンドウマネージャのすべてのサブプロセス、つまりユーザーが実行する端末とプログラムは、sshエージェントを使用できるようになります。

場合によっては、emacsを起動するシステムのユーザサービスでssh-agentを親プロセスとして実行することもできますが、もちろんあなたのエージェントは他の用途では動作しません。

2

私はkeychainを使ってssh-agentを管理しています。エージェントを起動し、関連するパラメータ(エージェントPIDとソケット)をシェルがソースとすることができるスクリプトにダンプします。これをEmacsに取り込むことができるEmacsパッケージkeychain-environmentがあります。

〜/ .bashrcに:〜/ .bash_profileの

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

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

〜/ .emacs.d/init.el:

(require 'keychain-environment) 
(keychain-refresh-environment) 
関連する問題