2020の年初よりコロナ禍が始まって、いきおいテレワークが導入されてウハウハ大変になったという方も多かろうと思います。
私は基本的に月〜金まで出社して職場のネットワークを使うのが平常状態の生活で、それまで自宅から職場のネットワークに繋ぐ手段を持ってはいたものの、運用上の緊急事態(障害対応など)がなければ使うことはありませんでした。
しかしコロナ感染の拡大の方は待ってくれず、テレワークでのサーバー運用が板についていないままでテレワークが開始されてしまいました。
職場では本番サーバー作業は二人一組で確認しながら行うことになっていたんですが、テレワークではままなりませんし、途中で回線が切れたらどうしようという問題もありました。
その時に大分前の Software Desigin誌に特集されていた tmux のことを思い出して導入することでこれらの懸念を払拭することができました。
ここでは、Ubuntu Server 22.04 に対して、Windowsクライアントの TeraTermから SSH接続して作業をするという想定で環境を作ってみようと思います。
GitHubのリポジトリはこちら
tmux/tmux
tmux はマルチプレクサと呼ばれるツールなんですが、説明を聞いてもイマイチ意味が分からないかも知れません。
どう説明すれば良いのか悩みますが、機能面の事を言うと
- TeraTermなどのターミナルツールの1画面を分割して複数の画面を切り替えながら作業できる
- tmuxが接続(セッション)を保持しているのでターミナルからtmuxまでの回線が切れてもセッションは無くならない
- 複数人で同じセッションを共有できる
こんな感じですが、やっぱりわからないと思います。
絵的にはこんな感じの仕組みになっています。
サーバーにある tmuxのプロセスが bash(をログインシェルとして仮定しています)を起動してくれているお陰でインターネット経由での接続が切れてもセッションは残ってる…って意味が分かるでしょうか。
論より証拠、やってみれば分かるということで、実際にやってみます。
Ubuntu Server 22.04にはデフォルトで tmuxがインストールされているようです。入れた覚えがないので…。
入っていなければ、sudo apt install tmux でインストールできるはずです。
subro@UbuntuServer2204:~$ sudo apt list tmux
一覧表示... 完了
tmux/jammy,now 3.2a-4build1 amd64 [インストール済み]
これで tmuxが使えるはず。
まず TeraTermで Ubuntu Server 22.04に普通にSSH接続します。
この時点では、赤い bashの画面になっています。
そうしたら tmuxを起動します。
subro@UbuntuServer2204:~$ tmux
画面下に緑色のラインが出ました。
これが tmuxのセッション下にあるという表示になります。
緑のラインの所に[ [0] 0:bash* ]とあり、「[0]セッションの 0ウィンドウで bashが動いています」ということです。
/sbin/initが仲介しているようですね。
先程の図で言うと赤い bashの画面を見ている状態です。
ここでCtrl+bを押した後、"を押すと、ウィンドウが上下に分割されます。
この分割された部分をペインと言い、それぞれで bashが起動しています。
Ctrl+bを押した後、矢印で行ったり来たりできます。
ウィンドウの中にペインが複数ある状態です。
Ctrl+bを押した後、cを押すと、ウィンドウが1つ増えてそちらを表示します。
緑ラインに[1:bash]というのが増えて、表示しているウィンドウを表す[*]が移っています。
Ctrl+bを押した後、nかpを押すと、ウィンドウを行ったり来たりできます。
この時点では、赤い bashの画面になっています。
この仕組みを駆使して頂ければ、大きなモニタであれば TeraTermからのログインは1つきりで、複数の画面があるように切り替えながら作業ができます。
ここでおもむろに TeraTermを終了させてしまいます。
そして改めて Ubuntu Server 22.04にSSHログインします。
以下を実行すると、tmuxが持っているセッションの情報を得ることができます。
subro@UbuntuServer2204:~$ tmux ls
0: 2 windows (created Sat Jul 2 16:20:35 2022)
得たセッション情報(0番のセッションがある)を使って以下のコマンドを実行します。
これをアタッチと言います。
-t が対象のセッションを指定するオプションです。
subro@UbuntuServer2204:~$ tmux attach-session -t 0
一度サーバーとの接続は切れたのに、セッションは残っていて、再びそこに接続することが出来ました。
これは TeraTermが死んでいる間にも、tmuxのセッションが残っているからです。
この機能のお陰で、インターネット回線が不安定で接続が切れてしまったとか、誤って画面を落としてしまったなどの場合でも、サーバーで実行中のコマンドが途中で終わってしまうことがありません。
なお tmuxが動作しているまま tmuxのセッションから離れることをデタッチと言います。
Ctrl+bを押した後、dを押すとデタッチです。
図の赤太字のところの画面を見ていることになります。
ここで tmuxをもう一つ起動します。
すると緑のラインには[1]という新しいセッション番号が出ます。
このようにセッションが1つ増えて、図の赤太字のところの画面を見ていることになります。
最後に TeraTermをもう1つ開いて、上記のやり方でセッション[1]にアタッチ作業をしてみて下さい。
こんな絵面の状態になります。
片方の TeraTermから何か入力してみると、もう一方の TeraTermにも同じものが出てくるはずです。
こうすることでセッションやペインの状態を複数人で共有することができるので、私のケースでは本番サーバーの作業員がお互い自宅にいながら作業確認をすることができました。
tmuxの終了は、全てのペインをexitなどで終了させて下さい。
セッションに所属しているペインが全てなくなれば、そのセッションを持つ tmuxのプロセスが終了します。
以上ですが、いかがでしょうか。
私はサーバー管理者なので、2人で同じ画面を共有できるのが一番の効果だったんですが、開発の人はリモートにある開発サーバーに接続した際に、分割された画面で複数の vimを起動してソースを同時並行に見るというような使い方をしているようです。
ターミナルを複数立ち上げるよりも話が早いところがあるので、使いようによって強力なツールになると思います。
このページでは、とほほさんのHPで tmuxの操作方法を参考にさせて頂きました。
とほほのtmux入門