リモート環境だけでなくローカル環境でも 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
|
|
以下のようにして実行してください
|
|