Python网络自动化运维---用户交互模块

文章目录

  • 目录

    文章目录

    前言

    实验环境准备

    一.input函数

     代码分段解析

    二.getpass模块 


前言

        在前面的SSH模块章节中,我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中,这样很容易导致账户/密码泄露,而使用Python中的用户交互模块,如input函数和getpass函数等,让用户自行输入账户/密码,则可以有效避免信息泄露。


实验环境准备

基础配置:

  • 路由器各接口配置IP
  • 交换机创建对应VLAN和vlanif接口,vlanif接口配置IP
  • 两台交换机开启SSH服务,并在本地电脑使用远程工具(如:Xshell)成功连接。

实验目的:

  • 配置getpass模块和input函数实现交互式的SSH用户名和密码输入
  • 配置for循环同时给两台交换机配置vlan 100~vlan 103

一.input函数

   在 Python 中,input 函数是一个内置函数,主要用于从标准输入(通常是键盘)读取用户输入的信息,input 函数的默认行为是将用户输入的任何内容都作为字符串类型返回给Python程序。

实验代码

import paramiko
import timefor ip in ["192.168.10.1","192.168.9.2"]:username = input("请输入用户名:")password = input("请输入密码:")ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,username=username,password=password)print(f"Successfully to connect {ip}")commend = ssh_client.invoke_shell()commend.send("sys\n")for vlan_id in range(100,104):print(f"正在创建vlan {vlan_id}")commend.send(f"vlan {vlan_id}\n")time.sleep(2)output = commend.recv(65535).decode("ascii")print("命令行界面配置过程:")print(output)time.sleep(2)
ssh_client.close()

 代码分段解析

导入模块

  • import paramiko:导入 paramiko 模块,这是一个强大的 Python 库,用于实现 SSHv2 协议,可用于远程连接和操作设备。
  • import time:导入 time 模块,用于在程序中添加延迟,等待设备处理命令。
import paramiko
import time

 遍历IP:

  • 利用for循环遍历元素为交换机IP地址的列表,实现每次for循环对一个交换机进行一次配置
for ip in ["192.168.10.1","192.168.9.2"]:

用户输入

  • username = input("请输入用户名:"):使用 input 函数接收用户输入的用户名。
  • password = input("请输入密码:"):使用 input 函数接收用户输入的密码。
username = input("请输入用户名:")
password = input("请输入密码:")

SSH 连接的建立

  • ssh_client = paramiko.SSHClient():创建一个 SSHClient 对象,用于建立 SSH 连接。
  • ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()):设置主机密钥策略为 AutoAddPolicy(),这样在连接未知主机时,会自动添加SSH服务器发送的密码,防止建立SSH连接失败。
  • ssh_client.connect(hostname=ip, username=username, password=password):使用提供的用户名和密码通过connect()函数连接到指定的 IP 地址的 SSH 服务器。

创建交互式会话并发送命令

  • commend = ssh_client.invoke_shell():使用 invoke_shell() 方法调用设备的命令行界面
  • commend.send("sys\n"):发送 sys 命令,可能是为了进入系统配置模式
  • for vlan_id in range(100, 104)::使用 for 循环命令,依次遍历vlan_id,。
    • print(f"正在创建vlan {vlan_id}"):打印当前正在创建的 vlan 信息。
    • commend.send(f"vlan {vlan_id}\n"):发送 vlan 命令,\n 表示回车键,即执行命令。

等待和接收输出

  • time.sleep(2):等待 2 秒,期望设备在这段时间内完成命令的执行,但这种等待方式不够可靠,因为不同设备的执行时间不同。
  • output = commend.recv(65535).decode("ascii"):使用 recv(65535) 接收最多 65535 字节的输出,并将其解码为 ascii 编码的字符串。
  • print("命令行界面配置过程:") 和 print(output):打印输出,显示设备的命令行界面配置过程。

 代码执行过程:

实验结果验证: 

二.getpass模块 

        当使用 input 函数时,用户输入的内容会明文显示在屏幕上,使用 getpass 函数时,用户输入的信息不会显示在屏幕上,这对于输入敏感信息(如密码、API 密钥等)非常有用。

实验代码在input函数的代码基础上更改如下:

import paramiko
from getpass import getpass
import timefor ip in ["192.168.10.1","192.168.9.2"]:username = input("请输入用户名:")password = getpass('Password:')ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=ip,username=username,password=password)print(f"Successfully to connect {ip}")commend = ssh_client.invoke_shell()commend.send("sys\n")for vlan_id in range(100,104):print(f"正在创建vlan {vlan_id}")commend.send(f"vlan {vlan_id}\n")time.sleep(2)output = commend.recv(65535).decode("ascii")print("命令行界面配置过程:")print(output)time.sleep(2)
ssh_client.close()

 此处不再赘述代码解析,用户在输入密码时将不会显示在屏幕上。

注意:getpass模块存在bug,无法在pycharm中运行,想要看到隐藏输入效果,可以在windows终端里运行python代码。

在pycharm左下角存在终端图标,可以打开windows终端:

 


总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过frm和ibd文件恢复mysql数据

1.提取所有的文件名并查找出以frm结尾的 dir /t /b >1.txt 2.要准备的软件 1.mysql-utilities-1.6.5-winx64.msi 2.vcredist_x64.exe(c 2013) 3.利用frm生成sql文件 mysqlfrm --serverroot:123456localhost:3306 --port3308 D:\phpstudy_pro\Extensions\MySQL5.7.26\da…

notepad++下载安装及使用笔记

文章目录 可以打开多大的文件可以打开多大的文件和内存设置有关吗,如何设置? TODO 如果打不开太大的文件 拆分为200M的肯定可以打开Find All in CurrentDocument(在当前文档中找到所有) 下载从百度网盘下载从官网下载 主要为了本地看大日志方便,例如几百…

【面试题】java基础概念

以下是关于这道面试题的回答,包括JDK中一些相关概念的区别以及JIT的原理: JDK中相关概念区别 JDK、JRE和JVM JDK(Java Development Kit):是Java开发工具包,它包含了JRE和一系列开发工具。JDK提供了编译、…

Linux内核中的InfiniBand核心驱动:verbs.c分析

InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux内核中的InfiniBand子系统通过提供一组核心API(称为Verbs API)来支持InfiniBand设备的操作。drivers/infiniband/core/verbs.c是InfiniBand核心驱动的重要组…

《CPython Internals》阅读笔记:p329-p335

《CPython Internals》学习第 16天,p329-p335 总结,总计 7 页。 一、技术总结 1.debugging p331, There are two types of debugger, console and visual——作者将 debugger分为两类:(1)console:lldb(MAC系统使用), GDB(Linux…

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾 引言 回望2024年,我不仅收获了技术上的成长,更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上,CSDN不仅是我展示技术成…

【程序化广告】相关技术(RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法)

上一篇介绍了【程序化广告】广告投放流程/漏斗/要素/策略/指标,本篇介绍一下程序化广告所使用到的相关技术,包括RTB竞价原理、Cookie映射流程、数据统计原理、程序化创意、防作弊方法等。 1. RTB竞价原理 1)竞价逻辑 用户开启电脑&#xf…

软件测试入门—用例设计中的场景图和状态迁移图

在软件测试领域,用例设计是一项至关重要的工作,它直接关系到软件质量的高低。而场景图和状态迁移图作为用例设计中的两种有效工具,能够帮助测试人员更全面、系统地设计测试用例。下面我们就来深入了解一下这两种图。 一、场景图 场景图主要…

数据表中的数据查询

文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…

第11章:Python TDD实现货币类加法运算初步

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

前端Vue2项目使用md编辑器

项目中有一个需求,要在前端给用户展示内容,内容有 AI 生成的,返回来的是 md 格式,所以需要给用户展示 md 格式,并且管理端也可以编辑这个 md 格式的文档。 使用组件库 v-md-editor。 https://code-farmer-i.github.i…

Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法

最近,Win11 24H2预览版和Win10 LTSC 2025功能更新偶尔会触发RunDLL错误弹窗 具体表现为 //英文提示 Error in C:\WINDOWS\system32\PcaSvc.dll Missing entry: PcaWallpaperAppDetect//中文提示 C:\WINDOWS\system32\PcaSvc.dll出错 丢失条目:PcaWallpaperAppDe…

【计算机视觉】人脸识别

一、简介 人脸识别是将图像或者视频帧中的人脸与数据库中的人脸进行对比,判断输入人脸是否与数据库中的某一张人脸匹配,即判断输入人脸是谁或者判断输入人脸是否是数据库中的某个人。 人脸识别属于1:N的比对,输入人脸身份是1&…

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告:高光谱成像技术检测食物新鲜度 检测原理:不同新鲜程度的食品,其化学成分和结构会有所不同,在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

Dangerzone:免费的危险的文件转换安全程序

我们知道很多杀毒软件会将很多文件视作恶意程序,尤其是带宏病毒的DOC文件,直接删除难免会带来不必要的麻烦,那么推荐一款免费的危险的文件转换安全程序:Dangerzone 。它可以检查各种可能有危险的文件并将其转换为安全版本&#xf…

销售线索管理的价值以及主要方法

销售线索管理的价值体现在:提高销售效率、优化客户体验、提升转化率、支持数据驱动决策。其中,提高销售效率尤为关键。通过系统化的线索管理,销售团队能够更快地识别和跟进潜在客户,从而缩短销售周期。自动化的线索评分和分配减少…

手写SOCKET进行HTTP通信

网络基础 我们电脑主板上都内置了多种网卡,一般主要有以下几类: 虚拟网卡(loopback) 注意,它是虚拟的,并不是物理网卡,也被称为是本地环回地址(或接口),一般将127.0.0.1作为本地环回…

在 C++ 中实现调试日志输出

在 C 编程中,调试日志对于定位问题和优化代码至关重要。有效的调试日志不仅能帮助我们快速定位错误,还能提供有关程序运行状态的有价值的信息。本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳。 1. 使用 #ifdef _DEBUG…

MFC程序设计(二)基于对话框编程

从现在开始,我们将以基于对话框的MFC应用程序来讲解MFC应用 向导生成基于对话框MFC应用程序 对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。在Visual C中,对话框既可以单独组成一个简单的应用程序&#xff0…

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游…