LoginSignup
1
4

More than 5 years have passed since last update.

Pythonを使ってターミナルサーバ経由でNW機器を操作する方法

Posted at

はじめに

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_typeterminal_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!
(省略)
1
4
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
1
4