实验目的:
公司有一台CE12800的设备,管理地址位172.16.1.2,现在需要编写自动化脚本,通过SSH登陆到设备上配置netconf协议的用户名,密码以及netconf服务,并且通过netconf协议将设备的loopback0接口IP地址配置为1.1.1.1/32。
实验拓扑:
步骤1:将本地电脑和ensp的设备进行桥接,桥接配置如下图所示:
正在 Ping 172.16.1.2 具有 32 字节的数据:
来自 172.16.1.2 的回复: 字节=32 时间=19ms TTL=255
来自 172.16.1.2 的回复: 字节=32 时间=7ms TTL=255
来自 172.16.1.2 的回复: 字节=32 时间=5ms TTL=255
来自 172.16.1.2 的回复: 字节=32 时间=7ms TTL=255
[CE1]aaa
[CE1-aaa]local–user python password cipher Huawei@123
[CE1-aaa]local-user python user–group manage-ug
Info: Succeeded in starting the STelnet server.
[CE1-ui–vty0-4]authentication–mode aaa
[CE1-ui–vty0-4]protocol inbound ssh
[CE1-ui–vty0-4]user privilege level 3
[CE1-ui-vty0-4]q
from paramiko import SSHClient,AutoAddPolicy
from ncclient import operations
<ethernet xmlns=”http://www.huawei.com/netconf/vrp” content–version=”1.0″ format–version=”1.0″>
<ethernetIf operation=”merge“>
<ifName>GE1/0/2</ifName>
</ethernetIf>
</ethernet>
<ifm xmlns=”http://www.huawei.com/netconf/vrp” content–version=”1.0″ format–version=”1.0″>
<ifDescr>Config by NETCONF</ifDescr>
<ifmAm4>
<am4CfgAddr operation=”create“>
<subnetMask>255.255.255.255</subnetMask>
</am4CfgAddr>
</ifmAm4>
</interface>
</interfaces>
</ifm>
</config>”’
def __init__(self,ip,username,password):
ssh.set_missing_host_key_policy(AutoAddPolicy)
ssh.connect(self.ip,username=self.username,password=self.password)
shell = self.ssh.invoke_shell()
f = open(“config_netconf.txt“)
for i in cmd:
sleep(2)
dis_this = shell.recv(999999).decode()
def netconf_connect(host, port, user, password):
return manager.connect(host=host,
username=user,
device_params={‘name‘: “huawei“},
joinlabs = datacom(service_ip,ssh_user,ssh_pass)
netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)
Warning: The initial password poses security risks.
The password needs to be changed. Change now? [Y/N]:n
Info: The max number of VTY users is 5, the number of current VTY users online is 1, and total number of terminal users online is 1.
The current login time is 2023-11-09 20:09:21.
The last login time is 2023-11-09 19:40:14 from 172.16.1.1 through SSH.
Enter system view, return user view with return command.
[CE1]aaa
[CE1-aaa]local-user netconf password irreversible–cipher Huawei@123
[CE1-aaa]local-user netconf service-type ssh
[CE1-aaa]local-user netconf level 3
[CE1-aaa]quit
[CE1]ssh user netconf authentication-type password
Info: Succeeded in adding a new SSH user.
[CE1]ssh user netconf service-type snetconf
Info: Succeeded in starting the SNETCONF server on SSH port 22.
[CE1]netconf
[CE1-netconf]protocol inbound ssh port 830
Info: Succeeded in starting the ssh port 830 service.
[CE1-netconf]quit
[CE1]
aaa
local-user netconf password irreversible–cipher Huawei@123
local-user netconf service-type ssh
quit
ssh user netconf authentication-type password
ssh user netconf service-type snetconf
netconf
quit
- 导入库
导入paramiko用于SSH远程登陆设备进行配置,导入ncclinet用于netconf的连接和配置。
service_ip = ‘172.16.1.2’
ssh_user = ‘python‘
ssh_pass = ‘Huawei@123’
netconf_user = ‘netconf’
netconf_pass = ‘Huawei@123’
port = ‘830’
将需要登陆设备的ip地址,ssh登陆用户名、密码以及netconf的用户名和密码定义为变量。
XMLS = ”'<config>
<ethernet xmlns=”http://www.huawei.com/netconf/vrp” content-version=”1.0″ format-version=”1.0″>
<ethernetIf operation=”merge“>
<ifName>GE1/0/2</ifName>
</ethernetIf>
</ethernet>
<ifm xmlns=”http://www.huawei.com/netconf/vrp” content-version=”1.0″ format-version=”1.0″>
<interfaces>
<ifDescr>Config by NETCONF</ifDescr>
<ifmAm4>
<am4CfgAddrs>
<am4CfgAddr operation=”create“>
<subnetMask>255.255.255.255</subnetMask>
<ifIpAddr>1.1.1.1</ifIpAddr>
</am4CfgAddr>
</am4CfgAddrs>
</ifmAm4>
</interface>
</ifm>
</config>”’
NETCONF通过XML文件传递配置信息。XML是一种非常常用的文本格式,可以<>不断嵌套展开数据。完整的NETCONF会话有传输层、消息层、操作层和内容层。在当前XML配置文件中传递的仅包含操作层和内容层。
本例中的XML文件意为将接口loopback 0接口IP地址改为1.1.1.1/32。
(6)定义def ssh_connect():方法,用于建立SSH连接,登陆网络设备
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy)
ssh.connect(self.ip,username=self.username,password=self.password)
return ssh
(7)定义def ssh_config():方法,用于登陆设备,进行配置
shell = self.ssh.invoke_shell()
shell.send(‘nn’)
f = open(“config_netconf.txt“)
for i in cmd:
shell.send(i)
sleep(2)
dis_this = shell.recv(999999).decode()
self.ssh.close()
f = open(“config_netconf.txt”)代表打开文件config_netconf.txt;
cmd = f.readlines() 代表对config_netconf.txt这个文件内容进行逐行的读取;
代表定义一个循环语句,将config_netconf.txt的内容输入在设备的命令行,即配置设备的netconf服务。
(8)定义netconf_connect():方法,用于建立netconf连接
def netconf_connect(host, port, user, password):
return manager.connect(host=host,
port=port,
username=user,
password=password,
device_params={‘name’: “huawei”},
look_for_keys = False)
定义函数netconf_connect(host, port, user, password)。函数输入四个参数为NETCONF主机的IP、端口、NETCONF用户名和密码。函数返回ncclient的manager.connect的方法。
manager.connect的作用是建立netconf连接。
if __name__ == ‘__main__’:
joinlabs = datacom(service_ip,ssh_user,ssh_pass)
netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)
首先执行joinlabs.ssh_config(),即调用datacom()这个类下的ssh_config这个方法。并且输入ssh登陆的ip、用户名及密码。
然后再执行netconf = netconf_connect(service_ip,port,netconf_user,netconf_pass)赋值为netconf,输入netconf的参数,建立netconf连接。
最后执行netconf.edit_config(target=’running‘,config=XMLS),将在变量中定义的XMLS这个文件通过edit_config这个方法发生到设备的running配置文件。
原文地址:https://blog.csdn.net/2301_76769137/article/details/134684293
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32790.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!