赞
踩
目录
1 编写程序,通过SSH和SFTP连接CE12800设备。
2 运行设备查询信息,下载设备配置文件,将文件保存在本地。
3 通过Netconf下发配置到接口G1/0/2。
1 实验设备准备SSH、SFTP、Neconf的CLI配置。
2 编写python代码。
rsa local-key-pair create
aaa
local-user huawei password cipher Ruijie@123
local-user huawei service-type ssh
local-user huawei level 3
quit
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
quit
ssh user huawei authentication-type password
stelnet server enable
ssh user haweui service-type all
ssh user huawei sftp-directory cfcard:
sftp server enable
netconf
protocol inbound ssh port 830
quit
- # -*- coding: utf-8 -*-
-
- # 定义NetConf操作的常量,用于后续的NETCONF操作
-
- from ncclient import manager
-
- from ncclient import operations
-
- #导入所需要的模块
-
- import paramiko # 用于完成SSH功能的模块
-
- import time # 提供时间等待功能的模块
-
-
-
-
-
- # 设备参数
-
- ip = '192.168.0.88' # 设备IP地址
-
- port = '830' # NetConf端口,默认为830
-
- user = 'huawei' # 登录用户名
-
- password = 'Ruijie@123' # 登录密码
-
- filename = 'cmd.txt' # 配置文件名,用于读取配置命令
-
-
-
-
-
- ####################################################### SSH
-
- # 定义一个名为HCIE的类,用于自动化SSH和SFTP操作
-
- class HCIE:
-
- # 初始化方法,创建一个SSH连接并设置shell
-
- def __init__(self):
-
- self.ssh_inst = self.ssh_conn() # 创建SSH连接
-
- self.shell = self.ssh_inst.invoke_shell() # 打开shell
-
- self.send_cmd('screen-length 0 temporary\n') # 禁用命令历史记录
-
-
-
- # 创建SSH连接的方法
-
- def ssh_conn(self):
-
- ssh_inst = paramiko.SSHClient() # 创建一个SSH客户端对象
-
- ssh_inst.set_missing_host_key_policy(paramiko.client.AutoAddPolicy()) # 设置自动添加主机密钥策略,以避免连接错误
-
- ssh_inst.connect(hostname=ip, # 连接到指定的主机地址和端口
-
- username=user, # 使用指定的用户名进行连接
-
- password=password) # 使用指定的密码进行连接
-
- return ssh_inst # 返回SSH客户端对象
-
-
-
- # 关闭SSH连接的方法
-
- def ssh_close(self, ssh_inst):
-
- ssh_inst.close() # 关闭SSH连接
-
-
-
- # 发送命令到shell并返回结果的方法
-
- def send_cmd(self, cmd):
-
- self.shell.send(cmd) # 将命令发送到shell
-
- time.sleep(1) # 等待1秒,确保命令已发送完毕
-
- return self.shell.recv(9999).decode() # 从shell接收数据,解码并返回结果
-
-
-
-
-
-
-
- ####################################################### SFTP
-
- # 定义一个操作函数,执行一系列任务
-
- def operation():
-
- rcie = HCIE() # 创建一个rcie对象,用于自动化SSH和SFTP操作
-
- with open(filename) as f: # 打开名为filename的文件,其中包含要执行的命令列表
-
- cmd_list = f.readlines() # 将文件中的命令读取为列表,每个命令占一行
-
- for cmd in cmd_list: # 对于文件中的每个命令
-
- result = rcie.send_cmd(cmd) # 使用rcie对象的send_cmd方法发送命令,并获取结果
-
- print(result) # 打印结果到控制台
-
-
-
- rcie.send_cmd('save\ny\n') # 发送保存命令到交换机,并确认保存操作
-
- rcie.ssh_close(rcie.ssh_inst) # 关闭当前的SSH连接,释放资源
-
-
-
- new_ssh = rcie.ssh_conn() # 重新创建一个新的SSH连接,因为之前的连接已被关闭
-
- sftp_inst = new_ssh.open_sftp() # 使用新的SSH连接打开SFTP会话
-
- sftp_inst.get('/vrpcfg.cfg', 'config_back.cfg') # 从交换机获取配置文件并保存到本地文件config_back.cfg中
-
- rcie.ssh_close(new_ssh) # 关闭SFTP会话和SSH连接,释放资源
-
-
-
- if __name__ == "__main__": # 确保这段代码只在直接运行时执行,而不是作为模块导入时执行
-
- operation() # 调用operation函数,执行自动化操作任务
-
-
-
-
-
-
-
- ####################################################### Netconf
-
- # 定义函数huawei_connect,用于建立NETCONF连接
-
- def huawei_connect(host, port, user, password):
-
- # 使用ncclient的manager模块来建立NETCONF连接
-
- return manager.connect(host=host, # 设备IP地址或主机名
-
- port=port, # 连接的端口,默认为830
-
- username=user, # 登录用户名
-
- password=password, # 登录密码
-
- hostkey_verify=False, # 禁用主机密钥验证,这里设置为False是为了简化代码,实际生产中应启用主机密钥验证
-
- device_params={'name': "huawei"}, # 指定设备类型为华为,这会影响连接过程中的一些行为和参数设置
-
- allow_agent=False, # 禁用NETCONF agent,设置为False表示不使用NETCONF agent
-
- look_for_keys=False) # 禁用密钥查找,设置为False表示不自动查找密钥
-
-
-
-
-
- # NETCONF发送XML数据,配置设备接口IP地址
-
- CREATE_INTERFACE = '''<config>
- <ethernet xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <ethernetIfs>
- <ethernetIf operation="merge">
- <ifName>GE1/0/2</ifName>
- <l2Enable>disable</l2Enable>
- </ethernetIf>
- </ethernetIfs>
- </ethernet>
- <ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
- <interfaces>
- <interface operation="merge">
- <ifName>GE1/0/2</ifName>
- <ifDescr>Config by NETCONF</ifDescr>
- <ifmAm4>
- <am4CfgAddrs>
- <am4CfgAddr operation="create">
- <subnetMask>255.255.255.0</subnetMask>
- <addrType>main</addrType>
- <ifIpAddr>192.168.2.1</ifIpAddr>
- </am4CfgAddr>
- </am4CfgAddrs>
- </ifmAm4>
- </interface>
- </interfaces>
- </ifm>
- </config>'''
-
-
-
- # 主函数,顺序执行
-
- if __name__ == '__main__': # 判断是否是直接运行此脚本,如果是则执行以下代码
-
- # 调用huawei_connect函数,建立NETCONF连接
-
- m = huawei_connect(ip, port, user, password)
-
-
-
- # 通过NETCONF连接对象m,执行编辑配置的操作,目标是运行中的配置,并传入要应用的配置CREATE_INTERFACE
-
- m.edit_config(target='running', config=CREATE_INTERFACE)
总结:本人立志做一个内容丰富且免费的专栏,如果本篇文章能够帮助到你,麻烦点赞加收藏。如有不足之处请私信或者评论告诉博主,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。