リモート環境だけでなくローカル環境でも tmux を使っていて、リモート環境でうっかり tmux を起動するとローカルの tmux の中に入れ子でリモートの tmux が起動します。この状態だとすべての tmux がプレフィクスが外側(ローカル側)に捉えれてしまって内側(リモート側)の tmux が制御不能となります。これを防ぐために、内側の tmux プレフィクスのキーバインドを変えるという方法 もあるのですが、操作が複雑で誤動作も多くなるのでもういっそ tmux から tmux を起動した場合は起動を抑制するようにしようと思います。
やり方は簡単で tmux には元々ネスト起動を防ぐために$TMUX環境変数が定義されていたら起動しないような動作をします。しかしながら、ssh で接続したときにはこの環境変数が ssh クライアントから ssh サーバに渡らないためネストが発生します。
従って解決方法は ssh 接続先に$TMUXを渡すということになります。このためには ssh サーバ/クライアント両方の設定が必要です。
ssh(クライアント側)の修正
~/.ssh/configの設定にSendEnvを追加します。
Host *
SendEnv TMUX
sshd(サーバ側)の修正
sshd の設定ファイルを修正します。
/etc/ssh/sshd_config
| |
変更するサーバがいっぱいあって大変だったので Ansible の Playbook を書きました。
sshd.yml
| |
以下のようにして実行してください
| |