私の鍵が保存されているマシンからSSHで接続し、2番目のマシンに転送してから、tmux内から鍵を使用しようとしています。 tmuxに入ると、転送が「緩んでいる」ように見えます。 tmux内からキーを使用できるように、「転送し直す」にはどうすればよいですか?
$ ssh [server] -o ForwardAgent=yes
$ git pull # Succeeds.
$ /bin/bash
$ git pull # Still succeeds, despite new Shell.
$ exit
$ tmux attach
$ git pull # Permission denied (publickey)
既存のtmuxセッションをアタッチしている場合、シェルはログインシェルから環境変数を継承していません。特に、sshエージェントの環境変数を継承しません。
試してみてください この修正 :
このスクリプトを作成し、$ HOME/.ssh/saveagentに配置します
#!/bin/sh
SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
for var in ${SSHVARS} ; do
echo "export $var=\"$(eval echo '$'$var)\""
done 1>$HOME/.ssh/latestagent
シェルの起動スクリプトに追加します。たとえば、bashを使用する場合:
echo '. ~/.ssh/saveagent' >> ~/.bash_login
Tmuxをアタッチした後、. $HOME/.ssh/latestagent
を実行します
参照 SSH経由で接続した直後にスクリプトを実行するにはどうすればよいですか および tmuxセッションに接続してコマンドを実行する
ここで他の回答を読んだ後、公開鍵/秘密鍵のペアをリモートサーバーにコピーすることにしました。これにより、エージェントの転送について心配する必要がなくなりました。
同じtmux
サーバーセッションによって生成された新しいシェルでさらに生成されたすべてのシェルで必要なすべての変数を含むスクリプトをソースにしたくない場合は、おそらくtmux
にset-environment
コマンドを使用して、セッションまたはグローバル環境に変数を追加します。たとえば、次のように(bashの場合):
for var in DISPLAY SSH_AUTH_SOCK ...; do
tmux setenv "$var" "${!var}"
done
他のセッションでも必要な場合は-g
フラグを追加し、tmux
の外部から実行する場合は-t <session>
を使用することを忘れないでください。