はじめに
Cisco IOSなどのNW機器を初期設定する際、USBコンソールケーブル経由で行うのが一般的かと思います。
他の方法として、以下の通りターミナルサーバ経由でSSH/Telnet接続し、「オンライン」の機器とほぼ同じ要領で初期設定することも可能です。
[ 作業PC ] - ( Ethernet ) - [ ターミナルサーバ ] - ( コンソール ) - [ NW機器 ]
ただし、オンライン接続といくつか異なる点があり、スクリプトがそのまま使えなかったりします。
- ユーザ名/パスワードの入力方法の違い
ターミナルサーバの設定で入力が省略できたり、プロンプトがターミナルサーバ側の仕様に依存するため、ユーザ名のプロンプトがlogin:
になったりする。
(IOSの場合はUsername:
やusername:
) - プロンプト表示の違い
オンライン接続の場合、ログイン時、自動的にプロンプトが表示されますが、ターミナルサーバの場合、明示的にEnterキーを押す必要がある。
NW機器を操作するためのPythonライブラリであるnetmiko
は、ターミナルサーバ経由のログインもサポートしており、今回はログインしてshowコマンド実行までの例をご紹介します。
事前準備
あらかじめ、以下コマンドでnetmiko
をインストールします。
pip install netmiko
Pythonコード
補足はコード内に記載していますが、ポイントは以下の3点です。
-
device_type
をterminal_server
に指定 (SSHでターミナルサーバへ接続) - 途中で改行コードを送信
- ログイン後、Redispatchという処理を行う
terminal_server.py
from netmiko import ConnectHandler
from netmiko import redispatch
import time
# デバイス情報を指定
device = {
'device_type': 'terminal_server', # 'cisco_ios'ではなく必ずこの値に指定
'ip': '192.168.100.200', # terminal serverのIPアドレス
'port': 3001, # NW機器に割り当てられたTCPポート番号
'username': 'admin', # terminal serverのユーザ名
'password': 'password', # terminal serverのパスワード
'secret': 'test', # NW機器のenableパスワード
}
# terminal server経由でNW機器に接続
net_connect = ConnectHandler(**device)
# 改行コードを送信し、後続処理のためにプロンプトを表示させる
net_connect.write_channel("\r")
time.sleep(1)
net_connect.write_channel("\r")
time.sleep(1)
# device_typeを`cisco_ios`に変更し、これ以降Cisco IOS用のクラスを使って処理を行う
redispatch(net_connect, device_type='cisco_ios')
# enableパスワードを入力
net_connect.enable()
# showコマンドを送信
output = net_connect.send_command('show run')
print(output)
# 切断
net_connect.disconnect()
実行結果
send_command
で指定した、show runの出力結果が表示されます。
'Building configuration...\n\nCurrent configuration : 2601 bytes\n!
(省略)