すでに転送されたsshキーをtmuxに転送するにはどうすればよいですか?


15

キーが保存されているマシンから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)

すべてのセッションで共有されているエージェントを起動した場合、それは機能します。bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > Configure ssh-agent Process のドキュメントに、この結果を達成する方法が説明されています。
デレクソン14

回答:


12

既存のtmuxセッションをアタッチしている場合、シェルはログインシェルから環境変数を継承していません。特に、sshエージェントの環境変数を継承しません。

この修正を試してください:

  1. このスクリプトを作成して、$ 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
  2. シェルの起動スクリプトに追加します。たとえば、bashを使用する場合:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. tmuxを接続した後、実行します . $HOME/.ssh/latestagent

SSH経由で接続した直後にスクリプトを実行するにはどうすればよいですか?も参照してくださいそして、tmuxのセッションに接続し、コマンドを実行します。


1
他のshシェルとの互換性を保とうとしている場合は、.profileに送信してください。
デレクソン14

2
素晴らしい答えです!いくつかの問題に遭遇しました:a-環境変数の一部にスペースが含まれているため、saveagentスクリプトの最後の前の行は次のようになりますecho "export $var=\"$(eval echo '$'$var)\""。b- latestagentスクリプトはのsource代わりにで呼び出す必要があるshため、変数の設定は呼び出し元のシェルに影響します。c- latestagenttmuxのアタッチ時にスクリプトを自動的に呼び出すには、ここで説明する方法を使用します。unix.stackexchange.com
Joe

@Joeに感謝します。私はあなたの改善を含めるために私の答えを修正しました。
GnP 14年

0

同じtmuxサーバーセッションによって生成された新しいシェルでさらに生成するすべてのシェルに必要なすべての変数を含むスクリプトをソースにしたくない場合tmuxは、set-environmentコマンドを使用してセッションまたはグローバル環境に変数を配置するように指示する必要があります。たとえば、次のような(bashの場合):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

-gフラグを他のセッションでも使用-t <session>する場合は追加し、の外部から実行する場合は使用することを忘れないでくださいtmux


0

ここで他の答えを読んだ後、公開鍵と秘密鍵のペアをリモートサーバーにコピーするだけにしたので、エージェントの転送を心配する必要がなくなりました。

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