Magit、システムのsshエージェントを使用する方法とパスワードを要求しない方法


19

MagitのFAQとWikiをグーグルで読んでみましたが、これを理解することはできません。Windowsについての答えしか見つかりません...

実行中のssh-agentセッションを使用し、プッシュの実行時にパスワードを要求しないようにMagitを構成するにはどうすればよいですか。

私はlinuxを実行しています。端末でssh-agentを起動してからキーをロック解除すると、毎回パスワードを入力しなくてもgit pushなどを実行できます。

Env:
Arch Linux
Emacs 24.4

キーが追加されたssh-agent。最初に開いた端末でロックを解除します。

編集:私はパスフレーズを使用するつもりでした、あなたはsshキーなどを知っています。
そして、私はBitbucketにプッシュしていますが、重要な問題はMagitが私のsshエージェントを話したり認識したりしていないことだと思います。
たぶん設定する設定があり、それを実行していることを伝えますか?


実際に同じ質問がありました。
emacsomancer

リモートURLとは何ですか?http://またはgit://?
Nsukami _

:URL = git@bitbucket.org:そうのようなgit@bitbucket.orgこの場合は、セットアップ
アンドレス

あなたがするとき、Emacsが何を返しているのか教えてくださいM-x getenv SSH_AGENT_PIDM-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を起動していましたが、実際にはどこにも言わず、システムに1つの未使用グローバルssh-agentと、シェル固有のロック解除されたエージェントがありました。
別のDEでは、同じ問題で実行される可能性があり、エージェントの自動開始を無効にするための詳細を見つける必要があります。

解決策1
このコマンドを実行して、起動ssh-agentの実行を無効にします

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

問題2
現在、EmacsにはSSH_AGENT_PIDおよびSSH_AUTH_SOCK変数が設定されていないため、ロードされた環境では何も起こりません。明らかに、私たちが開始した新しいssh-agentを知らないため、Magitはキーを要求します

解決策2
Emacsに環境からこれらの新しい変数を取得させる必要がありますが、もちろん簡単な方法はありません。
入力:exec-path-from- shell。シェルから環境変数を取得できます。そう。

  1. 任意の方法でexec-path-from-shellパッケージをインストールします。
  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のエージェントに満足せず、独自のエージェントを実行したい特定の理由はありますか?それを放棄することは、より簡単な解決策のように思えます。
トリプリー

私は常にXFCEを実行しているわけではなく、デスクトップがそれをどのように管理するか気にしません。oh-my-zshからそれを処理するプラグインを好みます。したがって、デフォルトのユースケースをスキップする方が簡単です。(私はほぼ十分な薬について知りません付与された...しかし、私は本当にについてとにかく時間の思考を過ごしたいものではありません)
アンドレス

Zshは、エージェントが既に実行されている場合を認識し、代わりにそれを延期する必要があります。しかし、明らかに、これはここでは話題から外れています。
トリプリー

1
たぶん、ssh-agencyはunixライクなシステムでも動作するように拡張されるべきです。
npostavs

7

遅延の別の解決策は、まさにこのケースを処理するパッケージを使用することです(Emacsのキーチェーン関連の環境変数を設定します):

  1. init.elパッケージkeychain-environmentをインストールして追加します。
  2. 実行するM-x keychain-refresh-environmentと、動作するはずです。
  3. (keychain-refresh-environment)init.elに配置して、Emacsの再起動後にソリューションが機能するようにします

ssh-agentが構成され、実行されていると仮定すると、それだけです。

パッケージのコメントからの本当に良い説明:

キーチェーンは、ssh-agentおよびgpg-agentを管理するスクリプトです。通常、シェルの初期化ファイルから実行されます。シェルとcronジョブが単一の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、systemdユーザー環境に変数を注入するスイッチがあります。

私が見つけた最も簡単な解決策eval "$(keychain --eval --quiet --noask --systemd keys...)"は、systemdユニットから実行されるスクリプトに追加してEmacsサーバーを起動することでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.