sshのような暗号化された通信であっても、ターミナルでの入出力をすべて記録することができます。
今回はCentOS8を使いssh通信を記録する方法について解説します。
タップできる目次
CentOSでターミナル入出力を記録する方法
ターミナル入出力の記録はtlogでおこなうことができます。
tlogのインストールと使い方
tlogはdnfコマンドでインストールできます。
[root@centos8 ~]# dnf install -y tlog
ターミナル入出力を記録する
ターミナルの入出力を記録するにはtlog-recコマンドを使います。「-o」オプションを付けるとファイルに書き出すことができ、このファイルを使って後で再生できます。
[root@centos8 ~]# tlog-rec -o tlog.rec [root@centos8 ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@centos8 ~]# whoami root [root@centos8 ~]# exit exit [root@centos8 ~]#
tlog-recコマンドを実行すると記録が開始します。いくつかコマンドを実行した後、exitを実行すると記録は停止します。
ターミナル入出力を再生する
ターミナル入出力を再生するにはtlog-playコマンドを実行します。「-i」オプションで再生したいファイル名を指定します。
[root@centos8 ~]# tlog-play -i tlog.rec [root@centos8 ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@centos8 ~]# whoami root [root@centos8 ~]# exit exit [root@centos8 ~]#
tlog-playコマンドで再生すると記録している際とまったく同じ画面入出力が再生されます。たとえば1秒ごとにコマンドを実行していれば、再生したときも1秒ごとにコマンドを実行している様子が再生されます。
再生時は次のコマンドで再生画面をコントールできます。
スペース or p | 一時停止/再開 |
---|---|
} | 再生速度を上げる(最大16倍速) |
{ | 再生速度を下げる(最大1/16倍速) |
BackSpace | 再生速度を1倍に戻す |
. | 次のパケットに飛ばす(長い間画面出力がない場合に便利) |
q | 再生を終了する |
Cockpitでターミナル入出力の記録を管理する
Cockpitを使うとGUIで管理できるようになります。これはとても便利なのでおすすめです。
Cockpitのインストールと設定
cockpitをdnfでインストールします。
[root@centos8 ~]# dnf install -y cockpit
インストールが完了したらCockpitを起動します。
[root@centos8 ~]# systemctl start cockpit
cockpitを起動したらWEBブラウザで接続します。接続先は「https://<IPアドレス>:9090」です。ポート番号に9090を指定してください。

WEBブラウザにログイン画面が表示されたらroot権限でログインし、左側メニューの「Session Recording」をクリックして矢印の先にある「Configuration」のボタンをクリックします。

設定画面の初期値は以下のようになっています。

最低限、赤丸で囲った3カ所の設定を確認してください。
1番のNoticeはユーザーに画面入出力を記録していることを警告するメッセージを指定しています。
2番のWriterはログの出力先を指定しています。初期値はJournalです。この他にSyslogとFileが指定できます。
3番のScopeは記録対象の範囲を指定します。

「All」にするとすべてのユーザーのターミナル入出力を記録します。今回はSomeを選択して特定ユーザーのみ記録するようにしてみましょう。

上記のようにScopeで「Some」を選択すると「Users」と「Groups」が入力できるようになります。例としてユーザー名「shj」を設定しました。
設定したら「Save」ボタンをクリックします。
記録できていることを確認する
それではユーザー「shj」でログインしていくつかのコマンドを実行してみます。
Web console: https://centos8.localdomain:9090/ or https://192.168.0.102:9090/ Last login: Fri May 15 08:02:59 2020 Locale charset is ANSI_X3.4-1968 (ASCII) Assuming locale environment is lost and charset is UTF-8 ATTENTION! Your session is being recorded! [shj@centos8 ~]$ id uid=1000(shj) gid=1000(shj) groups=1000(shj) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [shj@centos8 ~]$ whoami shj [shj@centos8 ~]$ exit
ユーザー「shj」でログインするとCockpitで設定したとおり「ATTENTION! Your session is being recorded!」とメッセージが表示されます。
WEBブラウザでCockpiを表示させ、左側メニューの「Session Recording」をクリックすると記録されていることがわかります。

ターミナル入出力を再生するには再生したいセッションをクリックします。そして再生ボタンをクリックすると以下のようにターミナル入出力の様子を見ることができます。

コマンドで再生する
Cockpitは初期設定ではJournalに記録します(他にはSyslogとFileが選択可能)。
Journalで記録されたファイルはコマンドでも再生できます。コマンドで再生する場合はtlog-playコマンドに「-r journal」でJournalを指定して「-M TLOG_REC=<ID>」オプションでIDを指定します。
IDはCockpitの画面で確認できます。以下の赤枠で囲った箇所がIDです。

このIDを使ってtlog-playで再生するには以下のようにします。
[root@centos8 ~]# tlog-play -r journal -M TLOG_REC=f260ddcf014f4ae293513df962eb2adc-1ef9-74783 [shj@centos8 ~]$ id uid=1000(shj) gid=1000(shj) groups=1000(shj) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [shj@centos8 ~]$ whoami shj [shj@centos8 ~]$ exit ログアウト [root@centos8 ~]#
まとめ
このようなツールは企業の監査やインシデント対応で役に立つはずです。
実行したコマンドやターミナル入出力をテキスト形式で記録している会社は多いかと思いますが、このように後からその場にいるように再生させることができるツールがあることを知っておくと選択肢の幅が広がるかと思います。