Golangの勉強でsshのラッパーコマンド『lssh』というのを作ってみた

最近ちょこちょこGoを勉強するようにしてたのだが、せっかくなので何か作ってみようと考えた。 で、なんかないかなと考えたところ、結構前にPythonでsshのラッパー書いてたのを思い出したので、今回はそれをGolangで書き直してみた。 sshのラッパーなので、基本Linux/Mac OS Xでしか動かない(Windowsは対象外)になってる。

作り直しなので前作ったPythonのラッパーと基本は変更せず、「\~/.lssh.conf」というtomlファイルにログイン情報を記述してコマンドを実行するだけにした。 (オプションとかちゃんと作りたいけど、まだ出来てない。設定ファイルくらいは「-f」オプションで指定させられるようにしたい。)

コマンドを実行すると以下のようにサーバ情報をリストにしてくれるので、ログインしたいサーバをカーソルキーで選択してEnterかスペースでログインさせる。 一応、pecoっぽい簡易的なフィルター機能はつけたので、サーバ数が多いときはそれで台数を絞る(全列を対象にフィルターされる)。

設定ファイルでlogを有効にすることで、(scriptコマンドではあるけど)TeraTermのログっぽいターミナルログを記録する。 フォーマットは指定できないけど、一応タイムスタンプを付与するようにしている。

「/etc/passwd」やsshdのauthorized_keysと組み合わせることで、ssh接続と同時に立ち上がるようにすることで踏み台としても利用できるようになっている。 (なお、SELinuxが有効になっている場合だと/etc/passwdに記述しての実行はうまくいかないかも…)

まだエラー処理などが不十分だったりオプションついてなかったりするので、ちょこちょこ更新してこうと思う。