C/C+

sshでログインしている端末の出力をのぞき見る

やりたいこと

  • 自分は端末Aでログインしている状態。
    端末Aから別の端末である端末Bのコマンドの入力、応答をのぞき見たい。
  • できればC言語で実装したい

実現方法

ググってみたところ、perl製のttylogを使ったり、shellスクリプトで頑張ればできるようです。
どちらも共通するのはstraceの出力を加工していること。

sshdに対してstraceを実行し、read(fd=13)の第2引数を取っています。

参考
orebibou.com

strace自体はptraceを使って実装されているので、マネすればc言語でもいけそうです。

ptraceについて

manページ見てもよくわからなかったのですが、下記の流れで実装すれば良いみたいです。

X86のレジスタ対応表(とりあえずreadの捕捉に必要なものだけ)

種目レジスタ(メンバ名)
システムコールの番号orig_rax
リターン値rax
第1引数rdi
第2引数rsi
第3引数rdx

ソースコード

ttytrace.c

ビルド

実行

監視したい端末のsshdのpidを指定する。
実行にはroot権限が必要です。

実行に成功していれば、ttylogとかと同様に監視対象の端末での操作内容がそのまま表示されます。
意外と短い実装で済んでよかった。