HCIP_Datacom_Network_Automation_Developer

SSH实验

Telnet Server端配置 使用ensp CE12800 数据中心交换机
enspCE12800设备包下载:
链接:https://pan.baidu.com/s/16NpwQiNxqUrJcrXoRhDPIQ
提取码:lxi4

连接到linux ssh

import paramiko

client = paramiko.SSHClient() # 看文档都是paramiko.client.SSHClient() 奇怪
# 允许连接未知主机,既新建立ssh连接是不需要输入y或n进行确认
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.1.248',22,'root','123456') # 连接 地址, 端口, 用户名, 密码
stdin,stdout,stderr=client.exec_command('ls -l') # 执行命令

# 输出命令
res,err=stdout.read(),stderr.read()
result=res if res else err
print(result.decode('utf-8'))

client.close()  # 关闭连接

ensp连接本地计算机:

这时候云就有接口了,用设备连接这个接口就可以通信了

设备CE12800配置STelnet

1. 配置设备Stelnet : 配置置用户界面
配置管理ip:
>system-view inmmediately  # 应该是立即刷新提交的数据
]interface vlanif 1
vlanif1]ip address 192.168.56.100 24
]interface g1/0/0
g1/0/0] undo shutdown
开启Stelnet功能:
]stelnet enable
配置用户界面:
]user-interface vty 0 4
vty0-4] authentication-mode aaa  # 配置用户认证模式为aaa认证
vty0-4] protocol inbound ssh  # 允许ssh进行登陆
vty0-4] user privilege level 3  # 用户级别为3 关于级别可以看 华为命令

2.配置用户: 创建本地用户和SSH用户, 配置服务类型和认证方式
]aaa
aaa] local-user python password irreversible-cipher Huawei12#$   # 密码要符合复杂规则
aaa] local-user python user-group manage-ug  # 用户假如manage-ug组
aaa] local-user python service-type ssh  # 服务方式为ssh
]ssh user python  # 创建ssh 用户python 要和aaa一样的名
]ssh user python autentication-type rsa  # 认证的协议 , 类型可以直接写密码password就可以使用密码登录了
]ssh user python service-type stelnet  # 使用的服务类型为stelnet

3. 配置公钥 :gitbash 添加客户端生成的公钥并分配给用户
客户端生成公钥使用git bash: 
$ ssh-keygen -m PEM -t rsa # 一直回车 , 
# 课件是 ssh-keygen -t rsa , 但是产生的文件是新的格式会报错
# 来源:https://www.cnblogs.com/dbf-/p/11114264.html
# paramiko.ssh_exception.SSHException: not a valid RSA private key file
# 不是一个有效的RSA密钥文件
# -m 参数指定密钥的格式, PEM 是之前使用的旧格式, 就可以正常使用了

# 回车后显示:
# Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/ZYX-HOME/.ssh/id_rsa):
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in /c/Users/ZYXWEB/.ssh/id_rsa  # 私钥
# Your public key has been saved in /c/Users/ZYXWEB/.ssh/id_rsa.pub  # 公钥

分配给用户:
] rsa peer-public-key rsa01 encoding-type openssh  # rsa01是创建的公钥的名称 ,编码方式为openssh
# 进入"RSA public key" 视图, 你可以使用"peer-public-key end"返回系统视图
rsa-public-key] public-key-code begin   # 开始输入公钥
# 进入 "RSA key code" 视图, 你可以使用"public-key-code end"返回RSA public key视图
rsa-public-key-rsa-key-code]ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCnDQ8
RPIb9PnTJnWU3QjQi+l+Sxd4qRWJFH/tY/OOZIsitcdiwdXajwAbJHyJ+Piyl18XtOnF5BHDM4VD+cDg
yIy+EqvPq589EH9mVMxPnoi3UYTQ8VfN/3haTFEjvOQgDn9VPG8fs62xr9UBR5wxQrr6ZXIYJ7cnajI5
oV67WMhQCIxXZo4wc0PzLDDr2zh2sOwis7NvAwFbQ50ED3MbAV1+EWxDKc95QJLy4SPxlY3eSlNUm6z8
/YCoDNzKmK61O/81Q/eZCYwfwFsAQ8wg2EJ51z3YtUmaz1zdDOaZzoj14OwoV5chjeCuutnJjO5wYxuN
b9QtR1iF6neS26MdZMOjDq8QhjiFoAYuY/xDoJd9Zmelvjg5tFTVGhaPXaAkwfngicv/oa/hA7rNR/TW
oHM6c/CDu8XUI4/8ilqrlhWQ/K48tgtJa+X8ZZ+KhGVOmViKdz1ar00NzhdcY83aPsLI5l092gxrvjOp
h2p66mLsRjz47GYPfULzxc7SBVIE= ZYXWEB@ZYXWEB
	
# 输入公钥 把/c/Users/ZYXWEB/.ssh/id_rsa.pub  里面的内容粘过来
rsa-public-key-rsa-key-code] public-key-code end  # 结束输入公钥 RSA key code视图
rsa-public-key] peer-public-key end  # 结束创建公钥 public key 视图
]ssh user python assign rsa-key rsa01  # 把公钥rsa01分配到 python 用户

服务端配置完成

Stelnet客户端python脚本

import paramiko
import time

ssh=paramiko.SSHClient()  # 实例化
# 允许连接未知主机,既新建立ssh连接是不需要输入y或n进行确认
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
# 开始连接
# 
ssh.connect(hostname='192.168.56.100',port=22,username='python',key_filename=r'c:\Users/ZYX-HOME/.ssh/id_rsa')
# key_filename = 密钥的文件名路径

cli=ssh.invoke_shell() # 获取交互式页面
cli.send('screen-length 0 temporary\n')  # 发送命令, 命令的意思是之后输出的命令显示全部, 不分屏显示
cli.send('display current-configuration\n')  # \n 是不是代表回车
time.sleep(3)  # 等三秒
dis_cu=cli.recv(999999).decode() # 收到的东西字节数999999(也就是全都接收), decode是解码
print(dis_cu)
ssh.close()

# 客户端配置完成

ensp文件及rsa公私钥下载

SE12800Sftp配置

1. 配置设备SFTP : 配置管理ip, 开启SFTP
# 配置ip 看上面的
]sftp server enable

2. 配置用户 : 创建SSH用户, 配置服务类型和认证方式以及SFTP路径
]ssh user python   # 建立用户
]ssh user python authentication-type rsa  # 认证模式rsa
]ssh user python service-type sftp  # 服务类型 sftp
]ssh user python sftp-directory cfcard:   # sftp的目录 注意cfard: 有个 ' : '
]ssh authorization-type default root # ssh的认证类型 默认 root

3. 配置公钥 : 添加客户端生成的公钥并分配给用户
#看上面的

4. 结果验证 : 查看上传的文件
# 下面有图

Sftp客户端Python脚本

import paramiko

# 本地私钥赋值给key
key=paramiko.RSAKey.from_private_key_file(r'c:\Users/ZYX-HOME/.ssh/id_rsa')
# 连接的地址和端口,可以直接使用一个元组会自动识别ip和端口
tran=paramiko.Transport(('192.168.56.100',22))
# 连接 用户名为python pkey就是私钥=key
tran.connect(username='python',pkey=key)
# 意思是创建一个sftpclient从(tran地址)
sftp=paramiko.SFTPClient.from_transport(tran)
# 本地路径
local_pach=r'c:\Users/ZYX-HOME/.ssh/vrptest.cfg'
# 远程路径
remote_pach='/vrpcfg.cfg'
# 下载
sftp.get(remote_pach,local_pach)
# 上传
sftp.put(local_pach,'/test.cfg')
# 关闭
tran.close()
# 结果看下图
成功

SNMP实验

snmp.txt:  # snmp 脚本配置snmpv3版本 , 使用时请删除注释
snmp-agent usm-user v3 admin group dc-admin  # 创建snmpv3的用户并加入到dc-admin组
snmp-agent usm v3 admin au sha  # 配置用户认证算法
Huawei@123
Huawei@123
snmp-a usm-user v3 admin pr aes128  # 配置用户的加密算法
Huawei@123
Huawei@123
snmp-agent trap source ME0/0/0  # 告警接口
snmp-agent mib-view included nt iso  # 配置视图
snmp-agent mib-view included rd iso
snmp-agent mib-view included wt iso
snmp-agent mib-view included iso-view iso
# 配置v3 组视图 ,privacy 加密权限 只读视图re 写视图wt 通知视图nt
snmp-agent group v3 dc-admin privacy read-view rd write-view wt notify-view nt

配置SNMP被管理端

# 连通性就不说了看上面,
# 先用paramiko登陆设备, 这两步看Stelnet的1,2步
# 使用open打开本地snmp.txt脚本, 结合paramiko配置设备,也就是只要配好Stelnet,就不用手动敲了
# 调用pysnmp通过设备snmp信息获取主机名

配置SNMP管理端

import imp
import paramiko
import time
from pysnmp.hlapi import *

ip='192.168.56.100'
username='python'
password='Huawei12#$'

# ssh登陆设备
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip,port=22,username=username,password=password)
print(ip+'login successfully')

# 打开一个channel, 输入配置
cli=ssh.invoke_shell()
cli.send('N\n')
time.sleep(0.5)
cli.send('screen-length 0 temporary\n')
time.sleep(0.5)

# 进入系统视图
cli.send('system-view immedia\n')
time.sleep(0.5)

# 逐行读取本地同一个文件夹里的snmp.txt, 写入ssh通道
with open('/test/Pysnmp/snmp.txt') as f :
    snmp_config_list=f.readlines()
    for i in snmp_config_list:
        cli.send(i)
        time.sleep(0.5)


# 建立SNMP的通道
UdpTransportTarget((ip,161))
g = getCmd(
    SnmpEngine(),  # 必须
    # 配置用户信息
    # 用户名, 认证密钥, 加密密钥 , 认证算法, 加密算法
    UsmUserData('admin','Huawei12#$','Huawei@123',
        authProtocol=usmHMACSHAAuthProtocol,
        privProtocol=usmAesCfb128Protocol),
    # udp 传输目标
    UdpTransportTarget((ip,161)),
    # 上下文信息,多进程才加参数,现在就默认
    ContextData(),
    # 查询的设备mib节点,可以使用对象名称,也可以使用OID
    # ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.0')))  # 官网查询为1.3.6.1.2.1.1.5 但是要在后面加上标量
    # 使用objectIdentity, 版本v2 sysname 标量0
    ObjectType(ObjectIdentity('SNMPv2-MIB','sysName',0)))
# 因为getcmd返回的是个生成器, 所以要用next()
errorIndication,errorStatus,errorIndex,varBinds=next(g)
for i in varBinds:  # 对获取的信息循环显示
    print(i)  # 输出全部
    # 对内容用'='分割, 输出下标[1]的副本并移除前导和末尾字符
    print(str(i).split('=')[1].strip()) 


# 产看脚本交互过程
dis_this=cli.recv(999999).decode()
print(dis_this)


# 关闭会话
ssh.close()

查询华为MIB : CE12800 交换机 产品信息 –华为 (huawei.com)

输出:

192.168.56.100login successfully
SNMPv2-MIB::sysName.0 = CE12800
CE12800

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 2022-04-16 14:33:37.
      The last login time is 2022-04-16 14:22:02 from 192.168.56.1 through SSH.
<CE12800>screen-length 0 temporary
Info: The configuration takes effect on the current user terminal interface only.
<CE12800>system-view immedia
Enter system view, return user view with return command.
[CE12800]snmp-agent usm-user v3 admin group dc-admin
Warning: Adding the user to a privacy group is recommended, because the bound group has insecure properties (with authentication or noauthentication configured).
[CE12800]snmp-agent usm v3 admin au sha       
Please configure the authentication password (8-255)
Enter Password:
Confirm Password:
[CE12800]snmp-a usm-user v3 admin pr aes128   
Please configure the privacy password (8-255) 
Enter Password:
Confirm Password:
Warning: The privacy and authentication passwords are the same, which is insecure. It is recommended that the privacy and authentication passwords be different.
[CE12800]snmp-agent trap source ME0/0/0       
Warning: Please configure an IP address to the interface.
[CE12800]snmp-agent mib-view included nt iso  
[CE12800]snmp-agent mib-view included rd iso  
[CE12800]snmp-agent mib-view included wt iso  
[CE12800]snmp-agent mib-view included iso-view iso
[CE12800]snmp-agent group v3 dc-admin privacy read-view rd write-view wt notify-view nt  
阅读剩余
THE END