ネットワーク機器にtelnetやsshで自動ログインする時のマクロを作るのは簡単ですが、コンソールで接続する際の自動ログインマクロ、難しくないですか? コンソール接続でログインする時って、機器の状態によってはUsernameから入力することもあるし、Passwordから入力することもあるし、すでにログインした状態になることもあるし、その都度プロンプトの戻り値が変わっちゃうんですよね。これのログインマクロ、昔から作りたいなーと思ってたんですが、やっと作れたんですよ!
ifとかで死ぬほど分岐すれば作れるんだろうなーってイメージはあったんですが、それもなんかイケてないよなって思いながら作ってなかったんですが、今回取り組んだら結構シンプルにできたので、公開します!
connect '/C=3' mpause 500 sendln '' wait 'Password:' 'Username:' '>' '#' if result=0 goto timeout0 if result=1 goto Password if result=2 goto Username if result=3 goto enable if result=4 goto after-enable :Password sendln '' :Username wait 'Username:' sendln 'cisco' wait 'Password:' sendln 'cisco' wait '>' :enable sendln 'enable' wait '#' :after-enable sendln 'show version' wait '#' :timeout0 end
ポイントは、waitのところで、複数キーワードを設定しているところですね。これが出来るの知らなかった……公式のTTLコマンドリファレンス、じっくり読んでみるもんですね。
waitで複数キーワードを設定した場合、マッチしたキーワードの番号をresultに格納してくれるんですよ。これが分かれば後はif分でgotoして分岐させれば簡単です。
分岐後のポイントとしては、最初にPasswordが来た時には空エンター送信してるところです。コンソールログインする時に、一番最初に文字列はPasswordになるのが多いです。 そのため、Usernameから入力できないので、わざと空エンターを送信してログインエラーとして、Usernameから入力するって方法をとってます。
また、これからenableモードになる場合や、既にenableモードになってる場合にも対応できるよう、sendlnとwaitする各箇所に:から始まるラベルを設定して、7行~11行のifでgotoさせてます。
割とコンソール接続でログインする時の面倒くささをバッチリ解決できたと思うので、このソースを参考にして自分の機器の挙動に合わせたコンソール接続ログインマクロを作成してみてください!