きっかけ
先日
SSHでログインしたサーバで作業した後に、とあるコマンドを実行した日時を知りたいと思ったのですが、既にシェルのセッションも残っておらず調べようがないーーーということがありました。
同僚はサーバにログインする際には、パッチを当てたtee
コマンドと ssh
をラップしたスクリプトを組み合わせて、
$ <ssh-wrapper> www.example.com
# Runs $ ssh www.example.com | tee -a -t /path/to/www.example.com.log
# (`tee`の`-t`はタイムスタンプをファイルの各行頭にダンプするパッチが提供するオプション)
みたいな感じでローカルホストにログを残すということを実現していると聞いて便利だなあと。
だけど
パッチを当てたtee
をビルドしたり ssh
のラッパースクリプトをインストールするのは、導入や管理の点で少し辛い感じがありますよね...
ということで
SSHでの操作内容をタイムスタンプ付きでログに出力できるツール coo を Go言語を作ってみました。
coo
インストール
$ go get github.com/mizoR/coo/cmd/{coo,coo-tee}
使い方
coo
は ssh
のラッパです。使い方は以下の通りで引数に 接続先の host
を渡すだけです。
$ coo
Usage: coo host [command]
たとえば、
www.example.com
に SSHでログインする場合は、
$ coo www.example.com
でログインできて、~/.ssh/transcripts/www.example.com/YYYY-mm-dd.txt
にログが作成されます。
今のところ SSHへオプションを渡す仕組みをもっていないので、基本的には~/.ssh/config
で頑張る感じになります...
内部的には
冒頭に書いた、
パッチを当てた
tee
コマンドとssh
をラップしたスクリプトを組み合わせて
をやっているだけです。coo
が ssh
のラッパー、coo-tee
が パッチの当てられたtee
です。
$ coo www.example.com
が実行されると、その内部では、
$ ssh www.example.com | \
coo-tee ~/.ssh/transcripts/www.example.com/YYYY-mm-dd.txt -a -t
が呼び出されてるという それだけです。
Go言語は触り始めて日が浅いし、ちゃんとコードを書いたのはほぼ初めてなので、mizoR/coo にプルリク等でツッコミをもらえるとうれしいです。