web-dev-qa-db-ja.com

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

私の鍵が保存されているマシンから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)
15
user50849

既存の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セッションに接続してコマンドを実行する

12
GnP

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

0
M. Scott Ford

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

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

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

0
peterph