sshを介してssh-agentを動作させるにはどうすればよいですか?


17

私のgithubアカウントに設定された秘密鍵があり、そのパスフレーズはOS Xのキーチェーンに保存されていると思います。確かに、ターミナルウィンドウを開いてを入力するときに入力する必要はありませんssh git@github.com

ただし、sshセッション上で、またはtmuxセッション内でローカルにbashを実行している場合、githubにsshしようとするたびにパスフレーズを入力する必要があります。

この質問は、画面にも同様の問題が存在することを示唆していますが、tmuxでそれを修正するほど十分に問題を理解していません。あります。このページにかなり複雑なソリューションを含むが、zshのため、。

編集

@Mikelの回答に応じて、ローカル端末から次の出力を取得します。

[~]
$ echo $SSH_AUTH_SOCK
/tmp/launch-S4HBD6/Listeners
[~] 
$ ssh-add -l
2048 [my key fingerprint] /Users/richie/.ssh/id_rsa (RSA)
[~]
$ typeset -p SSH_AUTH_SOCK
declare -x SSH_AUTH_SOCK="/tmp/launch-S4HBD6/Listeners"

一方、sshまたはtmuxで私は得る:

[~]
$ echo $SSH_AUTH_SOCK

[~]
$ ssh-add -l
Could not open a connection to your authentication agent.
[~]
$ typeset -p SSH_AUTH_SOCK
bash: typeset: SSH_AUTH_SOCK: not found

echo $SSH_AGENT_PID 私が実行したシェルは何も返しません。


どうtypeset -p SSH_AUTH_SOCK
ミケル

bash: typeset: SSH_AUTH_SOCK: not foundssh / tmux内からの@Mikel 。必要に応じて、今夜ローカルで試してみます。
リッチ

@Mikelそのコマンドの出力を質問に追加しました。
リッチ

知る限り、質問と回答はOS X固有ではありません。これは、一部の非OS X固有の重複、つまりsuperuser.com/q/334975/46794およびsuperuser.com/q/479796/46794を回避するのに関連しています
ブレイザーブレード

@Blaisorblade自分のパスフレーズがOS Xキーチェーンに保存されているという印象を受けました(なぜそうなったのか、今は思い出せませんが)。それは間違っていますか?
リッチ

回答:


4

私の同僚は、ライブエージェントの検索を支援するためにいくつかのbash関数を作成しました:https : //github.com/wwalker/ssh-find-agent

彼は主にシステム間(ラップトップからデスクトップなど)への接続に使用しますが、私はウィンドウマネージャからログアウト/ログインするローカルtmuxセッションに最もよく使用します(私自身はOS X)。

使用法

  1. ssh-find-agent.bashをダウンロードします(git clone git://github.com/wwalker/ssh-find-agent.gitworks)。

  2. 以下を〜/ .bashrcに追加します。

    . /path/to/ssh-find-agent.bash
    
  3. 次に、以下を入力して、現在のシェルでSSH_AUTH_SOCKを設定できます。

    set_ssh_agent_socket
    

SSHエージェントフォワーディングを必要としないため、動作する可能性のある他のいずれよりもこの回答を受け入れました。ありがとう!
リッチ14

8

dagit.oから選択したエレガントなソリューション:

作成する ~/.ssh/rc

#!/bin/bash
if [ -S "$SSH_AUTH_SOCK" ]; then
    ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

追加 ~/.tmux.conf

set -g update-environment "DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock

7

あなたには.tmux.conf、構成ファイル、次の行を追加します。

set -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION"

これにより、これらの環境変数がメインシェルからtmux内で開かれたシェルにコピーされます。これにより、ssh-agentがこれらのtmuxシェル内で適切に動作できるようになります。


2
これは、これらの値をtmuxセッションに取り込むための適切な方法ですが、これらの環境変数はすべて、デフォルト値のにすでに含まれている必要がありますupdate-environment。OPはupdate-environment値をチェックし、既に変更されている場合は更新する必要があります。
クリスジョンセン

1
うーん、さらに掘り下げた後、私は同意します-私がリストした設定はすでにデフォルトにあり、.tmux.confファイルなしでtmuxを実行すると、すべてが正常に機能します。そして、.tmux.confファイルから引用した行を削除すると、それは以前にも機能していませんでしたが、同様に機能しています。明らかに何か他のものが時折うまくいかないのは明らかです。たぶん、リモートでtmuxセッションにサスペンド/復元、アタッチ/デタッチ、またはsshingすることです。再現可能な要因が見つかった場合は、目を開けて更新します。
トレバーパウエル

update-environment正しく設定されています。ただし、問題は引き続き発生します。
リッチ

2
これに伴う問題は、tmuxサーバーが存在しない場合にのみconfigが再実行されるため、再接続の目的に反することです。これらの変数を再更新するコマンドラインスイッチがあるのでしょうか。
トビアスキンツラー

3

OS Xからsshを介して接続するときに作成されたペインが、しばらく動作してからパスフレーズを要求するようになりました。私はhttp://santini.di.unimi.it/extras/ph/my-tmux-setup.htmlからこの行を盗むことを修正する方法を見つけました

eval $(tmux show-environment -t [YOUR-SESSION] | grep '^SSH_AUTH_SOCK')

文句を言っているペインから実行するだけです。


2

bashまたは別のシェルを使用しているかどうかはわかりませんが、この男のtmuxセットアップはbashで機能するようです。個人的に、zshをoh-my- zshとともに使用していますが、追加した後、ssh-agentがtmuxで動作し始めたことがわかりました

zstyle :omz:plugins:ssh-agent agent-forwarding on

.zshrcファイルに追加し、実行中のzshセッションで設定をリロードしました。私はこの男のzsh指向のソリューションも見つけましたが、それは私にとって不要であることがわかりました。


1

何が:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

印刷?

通常のターミナルで実行してから、tmuxセッション内で実行します。彼らは同じものを印刷する必要があります。


これらのコマンドに対する応答を質問に追加しました。また、(tmuxを使用せずに)sshでログインしたときにも問題が発生することを認識し、それに応じて質問を編集しました。
リッチ

4
sshは簡単だ。エージェント転送をオンにします。それを行う最も簡単な方法は、のssh -A代わりに実行されsshます。エイリアスを使用すると、毎回入力したり、に入力したりする必要がなくなります.SSH/config
ミケル

クール、ありがとう。それはsshで機能しました。tmuxでそれを修正する方法はありますか?
リッチ

0

多くの解決策がありますが、最も簡単な解決策は、2014年1月27日付のStackOverflow関連の質問に対する2016年1月8日付のハンスジンゼルの回答にあります。シェル~/.profileなどに次を追加するだけです。

alias ssh='eval $(tmux show-env -s | grep "^SSH_") && ssh'

複数行の関数を定義したり、新しい一時ファイルを作成したりする必要はありません。エイリアスsshにしたくない場合は、最後に変更してfixssh削除&& sshし、再接続されたtmuxセッション内fixsshから実行しようとするたびに実行しますssh

Hans Ginzelの答えは、実行するにはtmuxの「新しいバージョン」が必要であることを示唆していますshow-env -s。これはtmux 2.7で機能し、changelogを読むと、-stmux 0.3がリリースされる直前の2008年6月3 日に追加されました。tmux 2.3(2016年9月29日)はDebian安定版です。

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