一、实验运行环境¶
1.1 主机操作系统¶
1.1.1 Window 10上运行Centos8(VMware虚拟机)¶
1.2 网络设备¶
1.2.1 Ensp模拟器上运行的华为三层交换机Quidway S5700-28C-HI¶
1.3 网络设备OS版本¶
1.3.1 华为IOS¶
1.4 Python版本¶
1.4.1 2¶
二、实验拓扑¶

三、实验所用地址¶
3.1 局域网IP段¶
3.1.1 0/24¶
3.2 运行Python的Centos主机¶
3.2.1 20/24¶
3.3 SW1¶
3.3.1 11/24¶
3.4 SW2¶
3.4.1 12/24¶
3.5 SW3¶
3.5.1 23/24¶
注意:实验环境必须要在同一网段,这里用不同地址代表不同网段
四、实验目的¶
4.1 在CentOS 8主机上开启FTP Server服务,创建Python脚本,将SW1-SW3的运行配置备份到TFTP服务器上¶
五、实验准备¶
5.1 将交换机SW2登录密码修改为123¶

5.2 将交换机SW3的G0/0/3的接口重新开启¶

5.3 在CentOS 8主机上执行命令'dnf install vsftpd -y'下载安装vsftpd(FTP服务)¶

建议安装之前确认主机是否能连通外网
5.4 安装完成后,在CentOS 8主机上执行命令'systemctl start vsftpd'和'systemctl enable vsftpd'让CentOS在当前和开机时启动vsftpd服务¶

5.5 执行命令'systemctl status vsftpd'来确认vsfptd已经被启动运行¶

5.6 执行命令'systemctl stop firewalld'、'systemctl status firewalld'关闭防火墙并查看防火墙运行状态¶

这里仅作实验演示,生产环境中建议修改防火墙策略!!!
5.7 执行命令'useradd --create-home python'和'passwd python'分别创建新的用户名python并根据提示设置密码python,用户名python将作为FTP的用户使用名¶

5.8 在虚拟机上创建一个包含交换机SW1、SW2、SW3的管理地址的文本文件,名为ip_list.txt¶

六、实验步骤¶
6.1 每台交换机提前配好SSH,这里不做过多描述,如有需要请参考SSH配置实验¶
6.2 配置互联地址,并进行Ping测试,这里不做演示¶
6.3 建议提前手工远程登录交换机进行测试¶
6.4 在虚拟机上创建名为backup.py的脚本,具体操作如下¶
6.4.1 执行命令'vi backup.py'创建脚本¶
6.4.2 输入'i'进入编辑模式¶
6.4.3 编写脚本内容,如下¶
#使用import语句导入paramiko模块、time模块和getpass模块
import paramiko
import time
#方便将getpass.getpass("password: ")简写成getpass("password: ")
from getpass import getpass
#使用input()函数以及getpass模块实现交互式输入用户名和密码
username = input("Username: ")
password = getpass("password: ")
#以只读的权限读取名为ip_list.txt的文件并将文件内容赋值给变量f
f = open("ip_list.txt")
#一行一行读取ip_list.txt文件内容并将其赋值给变量line
for line in f.readlines():
#将ip进行去除首尾空行处理
ip_address = line.strip()
#调用Paramiko的SSHClient()方法,将其赋值给变量ssh_client
ssh_client = paramiko.SSHClient()
#使用ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())来让Paramiko接受服务端提供的公钥
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#调用paramiko.SSHClient()的函数connect()进行SSH登录,look_for_keys=False用来解决避免Paramiko使用已存在密钥来登录设备
ssh_client.connect(hostname=ip_address, username=username, password=password, look_for_keys=False)
#打印提示信息
print("-------------------------------------------------------")
print(f"You have successfully connect to {ip_address}!")
#调用Paramiko的SSHClient()的invoke_shell()方法来唤醒shell,即设备命令行
command = ssh_client.invoke_shell()
#设置屏显长度为0
command.send("screen-length 0 temporary\n")
#进入系统视图
command.send("sys\n")
#关闭日志输出
command.send("undo info-center enable\n")
#返回用户视图
command.send("return\n")
#ftp连接服务器(虚拟机)
command.send("ftp 192.168.100.20\n")
#调用time模块下的sleep()函数手动让Python休眠1秒
time.sleep(1)
#输入登录服务器的账号和密码
command.send("python\n")
time.sleep(1)
command.send("python\n")
time.sleep(1)
#设置文件传输类型以支持二进制映像
command.send("bin\n")
#上传备份配置并更名
command.send("put backup.cfg " + ip_address + "_backup.cfg" + "\n")
time.sleep(3)
#退出ftp连接
command.send("qu\n")
time.sleep(1)
#设置命令行最大回显内容数并将其赋值给变量output并用decode("ascii")将其解析为ASCII编码
output = command.recv(65535).decode('ascii')
print(output)
#关闭文件
f.close()
#SSH连接中断
ssh_client.close()
6.4.4 执行命令'chmod +x backup.py'赋予脚本可执行权限¶
切记:不给权限执行脚本会报错
6.4.5 执行命令'python3.8 backup.py '跑脚本¶
6.4.6 跑完脚本结果如下:¶



6.4.7 验证配置是否完整备份,执行命令'cd /home/python'进入配置所在文件夹下面查看配置文件(默认备份到'/home/python'文件夹下面)¶

注意:这里只查看了SW1是配置