华为HCIE 编程自动化SSH、SFTP、Netconf实验

SSHSFTPNetconf

目录

SSH、SFTP、Netconf

实验需求:

实验拓扑:

过程思路:

具体步骤:

1(CLI)

2(Python)

结果验证:

终端工具SSH远程登录测试

python运行代码

dir命令查看备份效果

查看备份文件

查看G1/0/2的配置


实验需求:

1 编写程序,通过SSH和SFTP连接CE12800设备。

2 运行设备查询信息,下载设备配置文件,将文件保存在本地。

3 通过Netconf下发配置到接口G1/0/2。

实验拓扑:

 

 

 

过程思路:

1 实验设备准备SSH、SFTP、Neconf的CLI配置。

2 编写python代码。

具体步骤:

  • 1CLI

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

 

 

 

  • 2Python

# -*- 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)

 

 

 

结果验证:

终端工具SSH远程登录测试

 

python运行代码

 

dir命令查看备份效果

 

查看备份文件

 

查看G1/0/2的配置

总结:本人立志做一个内容丰富且免费的专栏,如果本篇文章能够帮助到你,麻烦点赞加收藏。如有不足之处请私信或者评论告诉博主,谢谢!

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值