85

切断された tmux セッションを再接続するときに SSH エージェントを復元する良い方法を見つけようとしています。

原因は、SSH エージェント セッションが変更されたが、tmux セッションからの環境変数が更新されていないことが原因のようです。

セッション自体をアタッチする前に、これを自動化するにはどうすればよいですか? 私が接続しているセッションには常に bash プロンプトがあるとは限らないため、その中に何かを入力する余裕がありません。tmux セッションを作成またはアタッチする前に実行する必要があります。

私が実行しているコードの例は、https: //gist.github.com/ssbarnea/8646491 にあります。これは、tmux を使用して永続的な ssh 接続を作成する小さな ssh ラッパーです。これは非常にうまく機能しますが、ssh エージェントが動作を停止することがあるため、それを使用して他のホストに接続できなくなります。

4

12 に答える 12

43

デフォルトで変数をtmux 更新 SSHしますが、更新する必要はありません

  • ソケットパスの変更/追加
  • SSH_AUTH_SOCKET変数を変更する

機能を追加するために変更したChris Downによるソリューションが好きです

fixssh() {
    eval $(tmux show-env    \
        |sed -n 's/^\(SSH_[^=]*\)=\(.*\)/export \1="\2"/p')
}

~/.bashrcfixsshセッションをアタッチした後、またはssh/ scp/の前に呼び出しrsyncます。

の新しいバージョンのtmuxサポート-sオプションshow-envなので、

eval $(tmux show-env -s |grep '^SSH_')

可能です。

于 2016-01-08T18:21:16.143 に答える
25

SSH_AUTH_SOCKウィンドウ内の更新に使用するものはtmux次のとおりです (Hans Ginzel のスクリプトに基づく)。

alias fixssh='eval $(tmux showenv -s SSH_AUTH_SOCK)'

またはtmuxそのためにはありませんshowenv -s

alias fixssh='export $(tmux showenv SSH_AUTH_SOCK)'
于 2016-12-05T05:38:03.193 に答える
2

私は TMUX (など) の構成を避け、すべてを純粋に .xml に保持することを好みます~/.ssh/リモート・システムで:

作成~/.ssh/rc:

#!/bin/bash

# Fix SSH auth socket location so agent forwarding works within tmux
if test "$SSH_AUTH_SOCK" ; then
  ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi

以下を に追加して、切り離された端末で古くなる に~/.ssh/config依存しないようにします。$SSH_AUTH_SOCK

Host *
  IdentityAgent ~/.ssh/ssh_auth_sock

既知の制限

  • ssh-addは使用しないため~/.ssh/config、 とは通信できませんssh-agent。SSH 経由でアクセスされる git リモートの更新と同様に、正常に動作するにもかかわらず、次のようなコマンドssh-add -lはエラーを生成します。ssh user@host
于 2019-01-01T18:03:32.763 に答える