#概要
同一サーバでアクセスして作業しているときに、ターミナルの操作をリアルタイムで共有。サーバの標準のコマンド(シェル)で行う。
共有元側でscriptコマンドで共有先のpts/x(標準入出力となっている端末デバイス)を指定することで実現。
サーバ構築のペアプログラミングするイメージです。
実施イメージ
後輩が入力した白画面(ターミナル)は先輩の画面上にリアルタイムで表示(共有される)
先輩が入力した黒画面(ターミナル)は後輩の画面上にリアルタイムで表示(共有される)
#前提条件
条件
- 同一サーバで接続
- 同一ユーザでログイン(異なるユーザの場合は終わり参照)
環境
- Red Hat Enterprise Linux (RHEL)8.3
- (おそらく、他のlinuxのディストリビューション(ubuntsu,centOS)でも可)
- 画面共有ツールが使えない。(zoom、teamsとか)
- 音声のみのコミュニケーション(電話・オンライン会議等)が取れる
(新人の)スキル
- sshでサーバに接続できる
背景
リモートワークが増える中で、新人がサーバを触るときに、横から見たり、教えることが難しくなってきました。画面共有ツールやIDE、サーバ側のツールを導入すればよいのですが、環境制約で導入ができない。標準のコマンドだけで、新人のターミナル上で作業をリアルタイムでの確認や指導する方法を検討しました。
(お互い出勤してても、横で作業するのも周りの目があるので、長時間できない)
使用コマンド
- ttyコマンド 使用している標準入出力となっている端末デバイスの確認
- scriptコマンド 端末セッションの忠実な記録する。(ログ。ターミナルの入力と出力の両方が記録される)
scriptで使用するオプション
オプション | 内容 |
---|---|
-f | ターミナルの入力があり次第、フラッシュ(書き込み)される |
-q | 開始や終了のメッセージを標準出力に書き出さない |
手順
事前準備
0. sshのクライアントソフト側でログを記録するように設定しておく1。
1. 先輩・後輩がそれぞれターミナルを2つ開く(自分の作業用と、相手の画面用)
2. ターミナルの色を黒と白に設定する
画面の色を変えているのは、作業ミスを防止や指示を容易にするためです。先輩の画面は左、後輩の画面を右などに決めるよりも、色のほうがコミュニケーションしやすいです。黒い方みて、白い方に、XXってかいてあるよね?など。また、作業中に他の資料を見たり、作業する画面の位置など好みがあるのため位置だとズレてしまうことがある。
後輩の画面を先輩に共有する
3. 先輩側の白画面でで使用しているpts/x(標準入出力となっている端末デバイス)を確認して後輩に伝える。
$ tty
/dev/pts/0
4. 後輩の白い画面でscripコマンドを打つ(先輩の白い画面のptsを指定する。ここでは/dev/pts/0)
$ script -fq /dev/pts/0
5. 後輩側で適用にコマンドを打って、先輩の白い画面でリアルタイムで表示されるかを確認する
先輩の画面を後輩に共有する
6. 後輩側の黒い画面で使用しているpts/x(標準入出力となっている端末デバイス)を確認して先輩に伝える。
$ tty
/dev/pts/2
7. 先輩の黒い画面でscripコマンドを打つ(後輩の黒い画面のptsを指定する。ここでは/dev/pts/2)
$ script -fq /dev/pts/0
8. 先輩側でコマンドを打って、先輩の黒い画面でリアルタイムで表示されるかを確認する
##終了するとき
9.先輩も後輩も一度scriptコマンドを終了する(exit)必要があります。そのため、サーバからログアウトしたければ、2回exitを入力
$ exit
#終わりに
少し制約がある場合でのターミナルの作業内容をリアルタイムで共有する方法でした。
Linuxサーバを体系的にどう教えるべきなのでしょうか。。。
とりあえず、徐々にスキルを習得することを祈ってます。
ログインしているユーザが異なる場合は、
- scriptの結果をファイルに出力
- ファイルに読み込み権限を与える
- tail -fで表示する
それぞれの手間が増えます。また、こちらのほうが記録もサーバ上に残ります。ただし、サーバにアクセスできなくなったときにログを見れなくなりますので、sshクライアント側でのログ取得もおすすめします。
#参考リンク
ttyとかptsとかについて確認してみる
scriptコマンド
まずはここから!Linuxサーバでカジュアルに作業ログを取得する方法
-
サーバ側に記録を残してもよいがオペミス等でサーバにアクセスできなくなった場合はログが見れなくなってしまうので、sshのクライアント側でもログを取得する ↩