俺は、TeraTermを捨ててRLoginを使うぞ!


telnetクライアントソフトと言えばTeraTerm。ネットワークエンジニアなら超定番ソフトです。私もネットワークエンジニアを始めた時からずっと使ってまして、作業を効率化するためにTERATERM.INIを複数作成し使い分けたり、KEYBOARD.CNFでショートカットキーをカスタマイズしまくったり、簡単な自動化マクロを作ったりとかなりの機能を使い倒してきました。Poderosaなども使ったりしてみましたが、TeraTermから乗り換える程ではありませんでした。TeraTermが後継版がリリースされ、どんどん便利な機能が追加されていった時なんか次はどんな新機能が追加されるのか、ワクワクしたもんです。TeraTermの便利機能の使い方とか情報まとめようかなととか考えてた矢先、RLoginを見つけました。

rlogin/telnet/ssh(クライアント)ターミナルソフト
【レビュー】多機能が魅力のターミナルエミュレーター「RLogin」 – 窓の杜

軽く触ってみて完全に乗り換えることを決意。私がTeraTermでやっていた機能がほぼ全部揃ってて、更にタブ機能もあり、画面の分割・切り替えもサクサク行えるし言うことなし! スクリプトも覚えればTeraTermマクロよりかなり自由度の高いものが作れそうです。ただ、ネットにスクリプトのサンプルも殆ど無い状態なので、プログラムが殆ど分かってない私にはハードル高めですが、試行錯誤しながら頑張ってます。

TeraTermからRLogin移行への決定打

TeraTermからRLoginに移行するのに決定打となったのは、複数の機器にログインした状態をそのまま保存できる機能です。作成されたrlgファイルを開けば即座に複数の機器にログイン出来ます。私は現状二つの機器に同時にログインすることが多いので、その状態を保存しておけるのはすごく便利。

接続しているウインドウに対して同時にコマンドが打てる「ブロードキャストコマンド」機能もかなーり便利。TeraTermでも一応出来るけど、こっちの方がサクッとオン/オフに出来るので使い勝手は断然こちらが上です。

もひとつこれもかなりすごいなと思ったのは、機器にログインしてるCLI上の文字列を検索できる機能があること。リアルタイムにCLIの中の文字列を検索出来るので、作業中にログをチェックするのがすごい楽になります。

RLoginで不便なところ

RLoginの本体はexe単体のファイルしかなく、設定情報などは全てレジストリに保存される仕組みになっているのですがここが若干不便です。これだと他のPCでRLoginを使いたい時、コピーするだけではサッと移行出来ない。ネットワーク機器やサーバーにログインする場合も、基本は先にログイン機器を登録しておくシステムなので、その場でパッと新しいIPの機器にログインするのには向いてないです。また、環境設定は接続先によって個々に保存されれおり、環境設定を作り直した場合、全ての接続先に反映させるのがちと面倒。この点は仕様なので、色々試しながら効率良い使い方を模索してます。

RLogin用に作ったサンプルスクリプト

「RLoginを使ってみたいけど、作り込んだTeraTerm Macroからの移行ができないよ!」とお嘆きの皆様の為に私が作ってみたスクリプトのサンプルを紹介しましょう。マジで簡単なスクリプトですが、私は四苦八苦しながら作りました……。

私がまずスクリプトで自動化したかったのは下記の6工程です。既に機器にログインしてる状態なのが前提です。

1.現在取得しているログをclose
2.新しいログファイルをopen(ログファイル名は yyyymmdd_hhmmss_Config_[機器IP].log。保存先フォルダはc:\log)
3.「terminal length 0」コマンドを送信
4.「show running-config」コマンドを送信
5.「terminal default length」コマンドを送信
6.取得しているログをclose

この操作を実現しようとするとこんな感じです。

Document.Log.Close ( );

Document.Log.Mode = 0;

logtime = strftime(“20%y%m%d_%H%M%S_Config_”);
loghost = Document.Entry.Host;
logname = “c:\\log\\” . $logtime . $loghost . “.log”;
Document.Log.Open ($logname);

sputs(“terminal length 0\n”);
swait(5, “#”);

sputs(“show running-config\n”);
swait(5, “#”);

sputs(“terminal default length\n”);
swait(5, “#”);

Document.Log.Close ( );


show running-configのログを単一のファイルに保存したいってスクリプトです。それでは私が苦しんだポイントを解説しましょう。

Document.Log.Mode = 0
環境設定で自動でログファイルを取得してまして、更にログファイルにタイムスタンプを付けるようにしてるんですが、show running-configのログにはタイムスタンプは付けたくないのです(DIFFしたりするから)。これを実現する為に「Document.Log.Mode = 0」の1行を入れてます。RLoginの仕様でログモードが「RAW」の場合はログにタイプスタンプを付けないっぽいのです。「0 = RAW」ってことみたいですね。

logtime = strftime(“20%y%m%d_%H%M%S_Config_”);
loghost = Document.Entry.Host;
logname = “c:\\log\\”. $logtime . $loghost . “.log”;
Document.Log.Open ($logname);
これらはログファイル名に自動で日付とか時間とかIPとか入れる為にありますが、ログファイルのパスの指定が分からずに四苦八苦。結果的に「\」マークを二重にすればオッケーということが判明。\マークは正規表現の記号で打ち消しの意味を持ってるので、二重にしないとダメということです。プログラマならさくっと分かりそうなもんですが、私はかなり悩みましたw

後はRLoginスクリプト仕様書のページを参照すれば大体分かるでしょう。今後もRLoginの効率の良い使い方とか便利スクリプトを作ったら、公開してきたいと思います。

RLogin自体は1998年からあるソフトみたいですが、去年くらいから精力的にアップデートしてるので、今後にも期待大です。どんどん便利機能が増えるといいな~。個人的にはログに付けるタイムスタンプは時間だけじゃなくて日付も付けてくれるとうれしいです。