web-dev-qa-db-ja.com

切断されたScreenセッションを介してSSHキー転送を再接続できますか?

重複の可能性:
要塞ホストでのscreenまたはtmuxでのssh-agentキーのタイムアウト

ページェント(PuTTY SSHキーエージェント)を実行しているラップトップを持っています。システムにsshして画面を起動すると、sshキー転送が正しく機能します。

ただし、その画面セッションから切断してログオフし、後で再接続すると、キー転送が機能しなくなります。これは、再接続すると、新しいsshセッションのキー転送が古いポートとは異なるポートに設定されているためだと思います。

キーを使用して再度転送できるように、個々の画面ウィンドウにエージェント転送に再接続するように教える方法はありますか?

8

私のソリューションはもう少し堅牢です。これをリモート側の.bash_profileに入れます。

if [ -z "${STY}" -a -t 0 ]; then
    reattach () {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-screen"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-screen" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
fi

次に、reattachの代わりにscreenを使用します。これは、「reattach」の代わりに「command screen -A ${1:+"$@"}」と「screen」を使用して実行できます。

@David Mackintoshによる回答で「エイリアス」ソリューションを使用する場合の問題は、画面で実行されているプロセスがリモート側で同じSSH_AUTH_SOCK値を持つようになったことです。次のシーンを考えてみてください。

  • ローカル:SSHエージェントがSSH_AUTH_SOCK値を取得し始める
  • ローカル:リモートへのSSH、リモートで新しいSSH_AUTH_SOCK値を設定
  • リモート:SSH_AUTH_SOCKを使用して、screenまたはtmuxを開始します
  • リモート:screenからSSH_AUTH_SOCKを継承するシェルを作成します
  • リモート:画面から切り離してログアウトします
  • ローカル:リモートへのSSH、リモートでnewSSH_AUTH_SOCK値を設定
  • リモート:画面セッションに再接続しますが、まだoldSSH_AUTH_SOCK値があります

秘訣は、画面内で実行されているプロセスに新しい値を使用させることです。これを行うには、screenを呼び出すたびに(新規または再接続されたセッションの場合)、現在のSSH_AUTH_SOCKへのシンボリックリンクを再ポイントします。

6
Arcege

これは実際には次の複製です: 要塞ホストのscreenまたはtmuxでのssh-agentキーのタイムアウト

ソリューション:

  • .bash_profileに追加します。

    echo "export SSH_AUTH_SOCK = $ SSH_AUTH_SOCK">〜/ .ssh/auth_sock

  • .bashrcに追加します。

    エイリアスssh = "source〜/.ssh/auth_sock; ssh"

これは私にとって今のところうまくいくようです。

2