GNU/Linux >> Linux の 問題 >  >> Linux

再接続するときにTmuxのEnv変数をリセットする必要がありますか?

私は主にMacで作業し、ssh/tmuxをLinuxマシンに接続して作業を行います。 Linuxマシンでssh-agentを実行しています。私は

set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY"

私の.tmux.confで 。それでも、このセッションに再度接続するときはいつでも、実行する必要があります

tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

新しいtmuxウィンドウに$SSH_AUTH_SOCKを設定するため 正しく設定してください。私はこれをする必要がないことを望みます。何かアイデアはありますか?

更新

私はこれをうまく説明していないと思います。リモートマシンでシェルを開くためのシェル関数は次のとおりです。

sshh () {
    tmux -u neww -n ${host} "ssh -Xt ${host} $*"
}

tmuxがこのsshコマンドを実行すると、$SSH_AUTH_SOCK ない ですが、設定します 私のローカル環境に設定します。これをsetenvを使用してtmuxの環境に配置すると 上記のコマンドでは、すべてが正常に機能します。私の質問は、なぜsetenvコマンドを実行する必要があるのですか?

アップデート2

詳細情報:

既存のセッションに接続すると、$SSH_AUTH_SOCK tmux環境(またはグローバル環境)では設定されていません。

% tmux showenv | grep -i auth_sock
-SSH_AUTH_SOCK

手動で設定すると、うまくいきます:

% tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK

切り離して再接続すると、$SSH_AUTH_SOCK 設定されていない状態に戻ります。

承認された回答:

バウンティを受け取ったので、完全を期すために、また同じ問題を抱えている訪問者を間違った方向に向かわせないように、キーコメントを再投稿します。

Tmuxは環境変数を削除します

Tmuxのマニュアルページには、update-environmentが「set-environmentコマンドに-rが指定されたかのように[…]ソース環境に存在しない変数を削除する」と記載されています。

どうやらそれが問題の原因でした。以下のクリスの回答をご覧ください。ただし、変数が「ソース環境」に存在せず、新しく作成されたtmuxウィンドウで有効である方法をまだ想像できません…

前の回答:

SSH転送の仕組み

リモートマシンで、SSH接続を確立した後、シェルの環境を確認します。

[email protected]:~$ env | grep SSH
SSH_CLIENT=68.38.123.35 45926 22
SSH_TTY=/dev/pts/0
SSH_CONNECTION=68.38.123.35 48926 10.1.35.23 22
SSH_AUTH_SOCK=/tmp/ssh-hRNwjA1342/agent.1342

ここで重要なのはSSH_AUTH_SOCKで、これは現在/tmp内のファイルに設定されています。このファイルを調べると、それがUnixドメインソケットであり、接続したsshの特定のインスタンスに接続されていることがわかります。重要なのは、これは接続するたびに変わることです。

ログアウトするとすぐに、その特定のソケットファイルはなくなります。ここで、tmuxセッションにアクセスして再接続すると、問題が発生します。 tmuxが最初にリリースされたときからの環境があります—それは数週間前だったかもしれません。その特定のソケットは死んでから長いです。

関連:複数行の文字列の最後の行に指定されたパターンが含まれているかどうかのシェルテスト?

解決策

問題は現在稼働中のSSH認証ソケットがどこにあるかを知ることに関係していることがわかっているので、予測可能な場所に配置しましょう!

リモートマシンの.bashrcまたは.zshrcファイルに、次を追加します。

# Predictable SSH authentication socket location.
SOCK="/tmp/ssh-agent-$USER-screen"
if test $SSH_AUTH_SOCK && [ $SSH_AUTH_SOCK != $SOCK ]
then
    rm -f /tmp/ssh-agent-$USER-screen
    ln -sf $SSH_AUTH_SOCK $SOCK
    export SSH_AUTH_SOCK=$SOCK
fi

tmux.confに「update-environmentコマンド」を入れる必要すらないと思います。マニュアルページによると、SSH_AUTH_SOCKはすでにデフォルトでカバーされています。

クレジット

私の回答は、画面の同じ問題を説明しているMark‘xb95’Smithによるこのブログ投稿の抜粋です。


Linux
  1. Linuxで元に戻すことはできますか?

  2. Envするかしないか?

  3. / etc /environmentのEnvVarsはグローバルに表示されませんか?

  1. Nohupをいつ使用するのですか?

  2. `-z`オプションを使用できない場合に、同等の` head -z`を実行するにはどうすればよいですか?

  3. ターミナルを閉じるときにすべてのTmuxセッションを閉じるようにBashrcを構成するにはどうすればよいですか?

  1. Ssh-agentがセットアップされていません(ssh_auth_sock、Ssh_agent_pid Env Varsが設定されていません)?

  2. ファイル名にスペースが含まれている場合、find コマンドの出力を解析するにはどうすればよいですか?

  3. 4.0 GiB が確実にあるのに、システムが 3.2 GiB の RAM しか表示しないのはなぜですか