实验目的:
公司有一台CE12800的设备,管理地址为172.16.1.2,现在需要编写自动化脚本,STELNET实现设备的自动保存配置文件,使用SFTP实现设备的文件下载。
实验拓扑:
步骤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
步骤3:配置CE1的SSH登陆。
[CE1-aaa]local–user python password cipher Huawei@123
[CE1-aaa]local–user python user–group manage-ug
[CE1]ssh user python authentication–type password
[CE1]ssh user python service–type sftp stelnet
[CE1]ssh user python sftp–directory cfcard:
完整代码如下:
from paramiko import SSHClient,AutoAddPolicy
ssh_pass = ‘Huawei@123’
def __init__(self,ip,username,password):
self.ssh = self.ssh_connect()
def ssh_connect(self):
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy)
ssh.connect(self.ip,username=self.username,password=self.password)
return ssh
shell = self.ssh.invoke_shell()
sleep(2)
shell.send(‘save CE1_save.zipn’)
sleep(2)
sleep(2)
sleep(2)
dis_file = shell.recv(999999).decode()
self.ssh.close()
def down_file(self):
localname = r’F:testCE1_save.zip’
self.ssh.open_sftp().get(remotename,localname)
self.ssh.close()
Joinlabs = datacom(service_ip,ssh_user,ssh_pass)
Joinlabs.save_config()
Joinlabs = datacom(service_ip,ssh_user,ssh_pass)
Joinlabs.down_file()
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 2.
The current login time is 2023-11-09 14:48:19.
The last login time is 2023-11-09 11:52:29 from 172.16.1.1 through SSH.
<CE1>save CE1_save.zip
Warning: Are you sure to save the configuration to cfcard:/CE1_save.zip? [Y/N]:y
Now saving the current configuration to the slot 17
Info: Save the configuration successfully.
<CE1>dir
Idx Attr Size(Byte) Date Time FileName
0 dr-x – Nov 09 2023 10:03:28 $_checkpoint
1 dr-x – Nov 09 2023 09:36:26 $_install_mod
2 dr-x – Nov 09 2023 09:37:01 $_license
3 dr-x – Nov 09 2023 09:37:06 $_security_info
4 dr-x – Nov 09 2023 09:37:03 $_system
5 -rw- 0 Nov 09 2023 09:36:26 CE12800
6 -rw- 866 Nov 09 2023 14:48:23 CE1_save.zip
7 -rw- 104 Nov 09 2023 09:36:26 VRPV800R011C00SPC607B607D0203_s12800.cc
8 -rw- 2,893 Nov 09 2023 14:48:23 device.sys
9 -rw- 1,718 Nov 09 2023 10:13:31 test.cfg
10 -rw- 1,718 Nov 09 2023 09:36:26 vrpcfg.cfg
8,388,608 KB total (6,224,796 KB free)
<CE1>
通过以上输出可以看出,设备的文件系统多了CE1_save.zip的保存配置文件。并且执行结果输出了get file succeed ,表示下载文件成功,在本地电脑上查看F:test 路径中是否存在
CE1_save.zip。
(1)导入库
(3)定义类
定义类datacom,类名为datacom。在此类中定义三个方法 ssh_connect()、save_config()、down_file()。
save_config()用于保存设备配置;
def __init__(self,ip,username,password):
self.ip = ip
self.username = username
self.password = password
self.ssh = self.ssh_connect()
构造方法__init__用于创建实例对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用它,用来初始化对象的某些属性。
def __init__(self,ip,username,password) 表示在调用类 datacom()时,所需要填入的ip地址,用户名和密码。
self.ip、self.username、self.password可以在同一个类的函数下进行传参的动作。
self.ssh = self.ssh_connect()代表调用下个步骤定义的ssh_connect()这个方法。
(5)定义ssh_connect()方法,用于建立SSH连接。
def ssh_connect(self):
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy)
ssh.connect(self.ip,username=self.username,password=self.password)
return ssh
ssh.connect(self.ip,username=self.username,password=self.password)代表ssh登陆网络设备时,将输入ip、用户名、密码三个参数。
(6)定义save_config()方法,用于保存设备配置。
def save_config(self):
shell = self.ssh.invoke_shell()#调用构造函数中的self.ssh,而self.ssh就是用于建立ssh连接的,并且开启交互式会话
shell.send(‘nn’) #输入命令no ,登陆是设备提示修改密码,此时输入n代表不修改密码
sleep(2)
shell.send(‘save CE1_save.zipn’) #输入命令save CE1_save.zip 将保存的文件命名为CE1_save.zip
sleep(2)
shell.send(‘yn’)
sleep(2)
shell.send(‘dirn’)
sleep(2)
dis_file = shell.recv(999999).decode()
print(dis_file)
self.ssh.close()
def down_file(self):
remotename = ‘CE1_save.zip’
localname = r’F:testCE1_save.zip’
self.ssh.open_sftp().get(remotename,localname)
print(‘get file succeed’)
self.ssh.close()
if __name__ ==’__main__’:
Joinlabs = datacom(service_ip,ssh_user,ssh_pass)
Joinlabs.save_config()
Joinlabs = datacom(service_ip,ssh_user,ssh_pass)
Joinlabs.down_file()
原文地址:https://blog.csdn.net/2301_76769137/article/details/134659886
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_4933.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!