【前提】
・pythonが実行できる環境を用意です。
・必要なライブラリは準備する。
以下、ファイルを
・xxx.py(以下にサンプルを記載)
・host_list.xxxtxt(以下にサンプルを記載)
・command_list.txt(以下にサンプルを記載)
構成図
Pythonコード
# 必要なライブラリ
from netmiko import ConnectHandler
import datetime
import chardet
#ファイルエンコードのチェック
def detect_encoding(filename):
with open(filename, “rb”) as f:
result = chardet.detect(f.read())
return result[“encoding”]
# command_listオープン
def read_command_list(filename):
with open(filename, “r”) as f:
return [line.strip() for line in f]
# ログインとcommand_list処理
def login_and_execute_commands(host_name, ip_address, username, password, command_list):
device = {
‘device_type’: ‘cisco_ios’,
‘ip’: ip_address,
‘username’: username,
‘password’: password,
}
# SSH接続処理
connection = ConnectHandler(**device)
outputs = []
for command in command_list:
output = connection.send_command(command)
outputs.append(output)
timestamp = datetime.datetime.now().strftime(‘%Y%m%d_%H%M%S’)
logfile = f”{host_name}_{ip_address}_{timestamp}.txt”
with open(logfile, ‘w’) as f:
for output in outputs:
f.write(output + “\n\n”) # Write each command output separated by two newlines
#メイン処理
def main():
filename = “C:\\host_list.txt”
file_encoding = detect_encoding(filename)
command_list_file = “C:\\command_list.txt”
command_list = read_command_list(command_list_file)
with open(filename, “r”, encoding=file_encoding) as txtfile:
for line in txtfile:
row = line.strip().split(“,”) # Split the line by comma
if len(row) != 4:
print(f”Invalid row in the TXT file: {row}”)
continue
host_name, ip_address, username, password = row
login_and_execute_commands(host_name, ip_address, username, password, command_list)
if __name__ == “__main__”:
main()
ホスト名リスト
ファイル名:host_list.txt
R1,192.168.1.1,admin,abc
R2,192.168.1.2,admin,abc
(ホスト名、IPアドレス、SSHログインユーザID、SSHログインパスワード)
コマンドリスト
command_list.txt
ter len 0
show run
show ver
show int fa0
show int fa1
show int fa0
(シスコ機器showコマンド例)