mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

鍵認証のサーバで「いつ」「誰が」「どの鍵で」ログインしたかを調べる方法

とあるSSH鍵認証のサーバにmochikoというユーザが居て、mochikoのauthorized_keysにはAさん、Bさん、Cさんの公開鍵が登録されている、とする。(要は1ユーザを複数名で共有している状態)

んで「いつ」「誰が」「どの鍵で」ログインしたのか?を調べたい、とする。その場合、sshd_configでSyslogFacilityがAUTHPRIV、LogLevelがVERBOSE(デフォルトはINFO)にしておけば、/var/log/secureで

Sep  1 12:23:16 ホスト名 sshd[2491]: Set /proc/self/oom_score_adj to 0
Sep  1 12:23:16 ホスト名 sshd[2491]: Connection from 接続元IPアドレス port 14338
Sep  1 12:23:17 ホスト名 sshd[2491]: Found matching RSA key: 43:9f:12:09:60:5b:ea:de:26:3d:6d:03:db:34:22:58
Sep  1 12:23:17 ホスト名 sshd[2492]: Postponed publickey for ユーザ名 from 接続元IPアドレス port 14338 ssh2
Sep  1 12:23:17 ホスト名 sshd[2491]: Found matching RSA key: 43:9f:12:09:60:5b:ea:de:26:3d:6d:03:db:34:22:58
Sep  1 12:23:17 ホスト名 sshd[2491]: Accepted publickey for ユーザ名 from 接続元IPアドレス port 14338 ssh2
Sep  1 12:23:17 ホスト名 sshd[2491]: pam_unix(sshd:session): session opened for user ユーザ名 by (uid=0)
Sep  1 12:23:17 ホスト名 sshd[2491]: User child is on pid 2493
Sep  1 12:23:21 ホスト名 sshd[2493]: Connection closed by 接続元IPアドレス
Sep  1 12:23:21 ホスト名 sshd[2493]: Transferred: sent 3328, received 2512 bytes
Sep  1 12:23:21 ホスト名 sshd[2493]: Closing connection to 接続元IPアドレス port 14338

3行目と4行目に「Found matching RSA key: 43:9f:12:09:60:5b:ea:de:26:3d:6d:03:db:34:22:58」のようなフィンガープリントと、「Postponed publickey for ユーザ名 from 接続元IPアドレス port 61840 ssh2」みたいなユーザ名表示が出るので、それで分かる。フィンガープリントを照らし合わせるには、そのサーバで

ssh-keygen -l -f /home/ユーザ名/.ssh/authorized_keys

としてやれば、

2048 43:9f:12:09:60:5b:ea:de:26:3d:6d:03:db:34:22:58 Aさんの公開鍵のコメント (RSA)
2048 30:1f:68:af:c5:f5:bf:65:40:87:bd:bd:2d:a8:af:2e Bさんの公開鍵のコメント (RSA)
2048 6c:1b:ae:ee:6e:13:49:fd:e5:9f:95:29:0b:13:bb:ad Cさんの公開鍵のコメント (RSA)

って出るので、これとさっき/var/log/secureに出たフィンガープリントを照らし合わせれば、ログインしたのがAさんだって分かる。

でもこれは秘密鍵と公開鍵のペアを作る時点で、コメントにメールアドレスとかフルネームとか、個人に紐づく何かを書いておくのが前提。公開鍵にコメントなんかつけてないし、どれが誰の公開鍵だか・・・という場合には、Aさん、Bさん、Cさんのパソコンの中の秘密鍵をPuTTYgenでLoadして、Key Fingerprintの欄に出るフィンガープリントを送ってもらえばよろし。

ちなみにSyslogFacilityをDEBUG1にすると、

debug1: matching key found: file /home/ユーザ名/.ssh/authorized_keys, line 1

みたいに「authorized_keysの1行目」っていう行数の情報も出るので、フィンガープリント照らし合わせなくても分かる。完全に無駄だけど。さらにDEBUG3とかにすると、SSHでログインした後も1文字入力する都度ログが吐かれて、うわあストーカー仕様・・・みたいになる。