web-dev-qa-db-ja.com

ssh-agentをssh上およびtmux(OS X上)で動作させるにはどうすればよいですか?

Githubアカウント用に秘密鍵を設定しています。パスフレーズはOSXのキーチェーンに保存されていると思います。ターミナルウィンドウを開いてssh [email protected]と入力するときに、入力する必要はありません。

ただし、sshセッションでbashを実行している場合、またはtmuxセッション内でローカルに実行している場合は、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は、実行元のシェルを何も返しません。

17
Rich

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

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

用途

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

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

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

    set_ssh_agent_socket
    
4
user104502

から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
8
mislav

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

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

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

7
Trevor Powell

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')

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

3
user1153623

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

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

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

2
cwjohnston

内容:

echo $SSH_AUTH_SOCK
echo $SSH_AGENT_PID
ssh-add -l

印刷?

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

1
Mikel

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

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

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

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

0
sjy