LoginSignup
30
30

More than 5 years have passed since last update.

peco+zsh+cloginで多数のルータへのログインを捗らせてみた

Last updated at Posted at 2016-06-07

peco(インタラクティブにフィルタリングするツール)を活用して、ルータリストから目的のルータを検索して選択し、コンフィグ管理ツールrancidのシスコルータ自動ログインスクリプトcloginを用いて、CUI/CLIでルータへのログインを捗らせてみました。

デモ画面:「nt-tky-rt1a」ルータを検索して自動ログイン
clogin1-compressor.gif

はじめに

大量のルータがある場合、CUIでホスト名やIPアドレスを入力してログインすることは結構大変です。ホスト名やIPアドレスの補完が効けばどんなに楽かと常々思っていました。

とある勉強会でコマンド実行履歴から絞り込んでコマンドを実行しているデモを見て同じ仕組みを実現したいと考えました。調べた見たところpeco+zshで簡単なシェルスクリプトを記述するだけで、同じようなことができることが判明したため、作成してみました。

今回はCUI/CLIベースのツール(peco + zsh + clogin)を組み合わせて、ルータへのログインを捗らせてみました。
clogin.007.png

peco

pecoはインタラクティブにフィルタリングするツールです。複数行のテキストを与えると、リスト形式で表示し、矢印キーで選択したり、文字列から検索など、自由にできます。

今回は事前に作成したCSV形式のルータリストからルータを絞り込んで、目的のルータにログインする仕組みを実現しました。

clogin(rancid)

コンフィグ管理ツールrancidには、シスコルータへの自動ログインスクリプトcloginが付属しています。
スクリプトの中にはexpectでルータにユーザ名、パスワードを送り、自動的にログインするスクリプトです。

仕組み

clogin.010.png

環境

必要なものはzsh(Zシェル)とpecorancidです。
簡単なシェルスクリプトを作成して、CSV形式で保存したルータリストからインタラクティブに選択し、cloginコマンドでルータにログインできるようにします。

今回は下記の環境で構築しました。

  • Ubuntu 16.04 LTS Server
  • zsh 5.1.1
  • peco v0.3.6
  • rancid 3.3.0

インストール

Ubuntuでは標準でzshとrancidがインストールされないため、aptコマンドでインストールします。合わせてログインシェルをzshに変更します。

pecoのバイナリ版がpeco/releasesからダウンロードできるため、最新版のv0.3.6をダウンロードします。

- zshをインストール
$ sudo apt install zsh

- rancidをインストール
$ sudo apt install rancid

- ログインシェルをzshに変更
$ sudo chsh -s /usr/bin/zsh

- pecoをダウンロードし~/binに保存
$ wget https://github.com/peco/peco/releases/download/v0.3.6/peco_linux_amd64.tar.gz
$ mkdir ~/bin
$ cp peco_linux_amd64/peco ~/bin/

設定

設定に必要なファイル

  • ~/routers.csv ルータ一覧ファイル
  • ~/.zshrc ルータ検索関数とショートカットキーの登録

routers.csv

ルータ一覧をExcelなどで作成し、CSVとして保存します。
今回はホスト名、機種名、実行するログインコマンドの順で記載しました。

# 形式:ホスト名、機種名、ログインコマンド
jt-hkd-rt1a,asr1000,clogin 172.16.1.54
jt-hkd-rt1b,c4000  ,clogin 172.16.1.164
jt-hkd-sw1 ,cat4900,clogin 172.16.1.93
〜略〜
nt-oky-sw5 ,cat4900,telnet 172.16.233.121

ルータ一覧のCSVフォーマット

  • 第1カラム:ホスト名
  • 第2カラム:機種名
  • 第3カラム:ログイン用のコマンド

zshrc

今回はzsh用のzshrcを下記のように定義しました。ポイントの下部のfunc peco-select-routers()周辺です。bindkey '^xr' peco-select-routersの定義によって、Ctrl-X + Rキーを押した時に、peco-select-routers()関数が実行されます。peco-select-routers()関数はルータ一覧ファイルをpecoに渡してインタラクティブに検索できるようにします。

~/.zshrc
# cloginは/usr/lib/rancid/binに保存され、標準ではPATHが通っていない
# $HOME/binと/usr/lib/rancid/binをPATHに追加
export PATH="$HOME/bin:/usr/lib/rancid/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

# ルータの検索関数を定義
function peco-select-routers() {
  BUFFER=$(cat $HOME/routers.csv | \        # CSV読み込み
           sed -e 's/,/,\t/g' | \           # 見やすくするための前処理
           peco --query "$LBUFFER" | \      # peco実行し、フィルタリング
           awk 'BEGIN{FS=",\t"}{print $3}') # 第3カラム目のログインコマンドを抽出
  CURSOR=$#BUFFER
  zle clear-screen
}
# ショートカットキーの定義Ctrl-X + rを押すと、ルータの検索関数を実行
zle -N peco-select-routers
bindkey '^xr' peco-select-routers  # Ctrl-x + r

処理内容

インタラクティブに検索を可能にしているのは下記のコマンドの組み合わせです。各コマンドをパイプで渡して最終的に実行するコマンドを抽出します。

処理内容

  1. ルータ一覧をcatコマンドでパイプに出力
  2. 区切り文字のカンマにTABを追加して見やすくする
  3. pecoでインタラクティブにフィルタリング
  4. 選択された行から実行するコマンドをawkで抽出(第3カラム)
  BUFFER=$(cat $HOME/routers.csv | \
           sed -e 's/,/,\t/g' | \
           peco --query "$LBUFFER" | \
           awk 'BEGIN{FS=",\t"}{print $3}')

さいごに

比較的簡単なスクリプトを記載することで、ルータのログインが捗ります。今回はCSVファイルでルータリストを作成しました。
ルータのコンフィグやbindなどのDNSのゾーン情報を読み込むことで同じようなこともできます。

実際の現場で利用し、普段のログインが非常に捗るようになりました。是非皆さんもご活用してみてください。

参考文献

30
30
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
30
30