はじめに
スクリプトを使ってネットワーク機器をhogehogeすることが流行っていますが、プログラミングができないネットワーク管理者でも簡単に使えるものを作りました。
記述したコマンドを順番に実行し、その結果を標準出力とホスト名.txtというファイルに出力します。
動作を確認したサーバー環境
- Ubuntu 16.04.4
- Perl 5.22.1
- Net::Telnetモジュールが必要です。
動作を確認したネットワーク機器
- Alaxala AX2430S、AX2530S
- NEC QXシリーズ
ちょっとしたコツ
多くのネットワーク機器のデフォルトの状態ではshowコマンドを実行するとページャーが動作します。ページャーが動作するとスペースキーなどを押さないと先に進めない状態になるので、スクリプトで何かを行うときには不向きです。スクリプトで何かを行うときはページャーを必ず無効にしましょう。
各ネットワーク機器でページャーを無効にするコマンドは以下の通りです。
- Alaxala:set terminal pager disable
- NEC QXシリーズ:screen-length disable
使い方
この例ではAlaxalaのスイッチに自動的にログインし、以下のコマンドを順番に実行します。これらのコマンドは管理者に昇格(enable)しなくても実行できます。管理者でしか実行できないコマンドをスクリプトで実行する例はまた別の機会に...(^^;;;
- set terminal pager disable
- show port
- show port vlan
- show vlan
実行時には引数でホスト名、もしくはIPアドレスを指定します。
./nw-command.pl <ホスト名>
スクリプト
nw-command.pl
# !/usr/bin/perl
use strict;
use Net::Telnet;
my $host = $ARGV[0];
my $user = 'myuser';
my $pass = 'mypassword';
my $prompt = '/>.*$/';
my $log = $host .".txt";
my @comm = (
"set terminal pager disable",
"show port",
"show port vlan",
"show vlan"
);
my $telnet = new Net::Telnet(
Timeout => 10,
Prompt => $prompt,
Input_log => $log,
);
$telnet->open($host);
$telnet->login($user, $pass);
my $result;
foreach my $line(@comm){
$telnet->print($line);
($result) = $telnet->waitfor($prompt);
print $result;
}
$telnet->print("quit");
$telnet->close;
実行例
実行結果は標準出力とログファイルに出力されます。
login: myuser
Password:
Copyright (c) 2005-2016 ALAXALA Networks Corporation. All rights reserved.
olexala> set terminal pager disable
olexala> show port
Date 2018/04/14 09:38:13 JST
Port Counts: 48
Port Name Status Speed Duplex FCtl FrLen ChGr/Status
0/ 1 geth0/1 up 1000BASE-T full(auto) off 9234 -/-
0/ 2 geth0/2 up 1000BASE-T full(auto) off 9234 -/-
:
<中略>
:
0/47 geth0/47 dis - - - - -/-
0/48 geth0/48 dis - - - - -/-
olexala> show port vlan
Date 2018/04/14 09:38:13 JST
Port Counts: 48
Port Name Status Type VLAN
0/ 1 geth0/1 up Access 100 (VLAN0100)
0/ 2 geth0/2 up Access 100 (VLAN0100)
:
<中略>
:
0/47 geth0/47 dis Access 111 (VLAN0111)
0/48 geth0/48 dis Access 111 (VLAN0111)
olexala> show vlan
Date 2018/04/14 09:38:14 JST
VLAN counts:4
VLAN ID:1 Type:Port based Status:Disable
Learning:On Tag-Translation:
BPDU Forwarding: EAPOL Forwarding:
Router Interface Name:VLAN0001
:
<中略>
:
Description:VLAN0834
Spanning Tree:
AXRP RING ID: AXRP VLAN group:
GSRP ID: GSRP VLAN group:
IGMP snooping: MLD snooping:
olexala>
NEC QXシリーズの場合
コマンドの記述部分を変えれば、基本的に動きます。