LoginSignup
47
47

More than 5 years have passed since last update.

Go言語で SSHでの操作内容をタイムスタンプ付きでログに出力できるツールを作った

Last updated at Posted at 2014-10-12

きっかけ

先日

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}

使い方

coosshのラッパです。使い方は以下の通りで引数に 接続先の 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 をラップしたスクリプトを組み合わせて

をやっているだけです。coosshのラッパー、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 にプルリク等でツッコミをもらえるとうれしいです。

47
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
47