网络工程师的python之路-基于paramiko登录设备

实验背景

与Netmiko不同,Paramiko不会在做配置的时候替我们自动加上sys、return等命令,也不会在执行各种display命令后自动保存该命令的回显内容,一切都需要我们手动搞定。另外,Python不像人类,后者在手动输入每个命令后会间隔一定时间,再输入下一个命令。Python是一次性执行所有脚本里的命令的,中间没有间隔时间。当你要一次性输入很多个命令时,便经常会发生SSH终端跟不上速度,导致某些命令缺失没有被输入的问题(用传统的“复制、粘贴”方法给网络设备做配置的人应该遇到过这个问题)。同样,在用print()函数输入回显内容或者用open.write()将回显内容写入文档进行保存时,也会因为缺乏间隔时间而导致Python“截屏”不完整,从而导致回显内容不完整。Netmiko自动帮我们解决了这个问题,也就是说,不管上面所举的Netmiko例子中config_commands列表中的元素(命令)有多少个,都不会出现因为间隔时间不足而导致配置命令缺失的问题。而在Paramiko中,我们必须导入time模块,使用该模块的sleep()方法来解决这个问题, 与Netmiko一样,Paramiko也是第三方模块,需要使用pip来下载安装,方法如下所示。

pip3.10 install paramiko

下载完毕后,进入Python 3.10解释器,如果import paramiko没有报错,则说明Paramiko安装成功。

实验准备

将LSW2的ssh密码改为123,模拟验证失败,连接LSW4的接口关闭,模拟不可达。

创建一个ip.txt的文本用于存放ip地址,创建一个cmd.txt用于存放命令,创建本次实验脚本lab.6py

实验目的

1.使用SSH登录LSW2~LSW5各台设备,并将其stp模式改为STP,默认为MSTP。

2.使用异常处理模块,当遇到不能登录到的设备跳过其设备,并记录到文档。

实验拓扑

将ensp的LSW1与本地虚拟网卡loopback0进行桥接,模拟将自己的电脑桥接到以下拓扑网络中。

实验脚本

import paramiko
import time
import getpass
import socket  #处理网络不可达引起的socket.error
username=input('Username:')
password=getpass.getpass('Password:')
f1=open('验证失败.txt','a+') #创建文件存放验证失败的设备
f2=open('不可达.txt','a+')   #创建文件存放不可达设备
iplist=open('ip.txt')
for line in iplist.readlines():
    try:
        ip=line.strip()
        ssh_client=paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(hostname=ip,username=username,password=password)
        print('成功登录到交换机:'+ip)
        command= ssh_client.invoke_shell()
        cmdlist=open('cmd.txt')
        for line in cmdlist.readlines():
            command.send(line)
        cmdlist.close()
        time.sleep(2)
        output=command.recv(65535).decode('ascii')
        print(output)
    except paramiko.ssh_exception.AuthenticationException:
        print(ip+'验证失败!')
        f1.write(line+'\n')
    except socket.error:
        print(ip+'不可达!')
        f2.write(line+'\n')
iplist.close()
f1.close()
f2.close()
ssh_client.close()

实验代码解释

代码分段讲解如下。

(1)调用Paramiko的SSHClient()方法,将其赋值给变量ssh_client。顾名思义,windows主机做SSH客户端,而SSH服务端则是我们要登录的交换机。

ssh_client=paramiko.SSHClient()

(2)默认情况下,Paramiko会拒绝任何未知的SSH公钥(publickey),这里我们需要使用ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 来让Paramiko接受SSH服务端提供的公钥,这是任何时候使用Paramiko都要用到的标准配置

ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

(3)在做完Paramiko关于SSH公钥相关的配置后,调用Paramiko.SSHClient()的connect()函数进行SSH登录,该函数包含3个必选的参数hostname、username和password,分别对应我们创建的ip、username和password 3个变量,也就是远程登录的设备的主机名/IP地址、SSH用户名和密码。如果SSH登录设备成功,则提示用户并告知所登录的交换机的管理IP地址。

 ssh_client.connect(hostname=ip,username=username,password=password)

(4)SSH连接成功后,需要调用Paramiko.SSHClient()的invoke_shell()方法来唤醒shell,也就是华为设备IOS命令行,并将它赋值给变量command。

command=ssh_client.invoke_shell()

(5)之后便可以调用invoke_shell()的command()函数来向交换机发布命令。这里使用for循环

cmd_file里面的命令。

cmdlist=open('cmd.txt')
for line in cmdlist.readlines():
    command.send(line)
    cmdlist.close()

(6)这里的command.recv(65535)中的65535代表截取65535个字符的回显内容,这也是Paramiko一次能截取的最大回显内容数。另外,与Telnetlib类似,在Python 3中,Paramiko截取的回显内容格式为字节型字符串,需要用decode("ascii")将其解析为ASCII编码,否则打印出来的output的内容格式会很难看。

time.sleep(3)
output=command.recv(65535).decode('ascii')
print(output)

(7)配置完毕后,使用close方法退出SSH。运行代码后看结果、做验证。

ssh_client.close

实验结果

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《网络工程师Python之路》是一本介绍网络工程师如何应用Python技术的书籍。Python作为一种流行的编程语言,在网络工程领域中有着广泛的应用。该书以网络工程师的实际应用为出发点,通过讲解Python的基础知识,以及与网络相关的模块和库的使用,帮助读者掌握Python网络工程中的应用。 书中内容主要包括以下几个方面: 首先,介绍了Python的基础语法和常用数据结构,帮助读者打下扎实的编程基础。无论是网络编程还是自动化部署,良好的编程基础都是必不可少的。 其次,介绍了与网络相关的Python模块和库,如socket、requests、paramiko等。这些模块和库可以帮助网络工程师实现网络通信、远程控制以及网络设备的配置等功能。通过实际案例的讲解,读者可以学习如何利用Python编写高效的网络程序。 此外,书中还介绍了一些自动化部署工具和框架,如Ansible、Fabric等。这些工具可以帮助网络工程师简化部署过程,提高工作效率。通过学习这些工具的使用,读者可以了解到如何利用Python编写自动化脚本,实现自动化部署和配置管理。 最后,书中还包含了一些网络安全方面的内容,如利用Python进行网络漏洞扫描、攻防模拟等。这些内容帮助读者了解网络安全的基本原理,并学习如何应用Python进行网络安全工作。 《网络工程师Python之路》适合网络工程师和对网络编程感兴趣的读者阅读。通过学习该书,读者可以全面了解Python网络工程领域的应用,并掌握相应的编程技巧和工具使用。无论是提高工作效率,还是拓宽职业发展方向,该书对于网络工程师都是一本值得推荐的参考书籍。 ### 回答2: 《网络工程师Python之路》是一本探讨网络工程师如何运用Python进行网络编程和自动化的PDF电子书。这本书主要介绍了Python语言的基础知识,并结合实际网络工程的案例,帮助读者理解和掌握Python网络领域的应用。 首先,书籍从Python的基本语法和数据结构开始介绍,帮助读者建立对Python语言的基本认识。然后,逐步引入网络编程的相关知识,包括TCP/IP网络协议、套接字编程和网络通信等内容。通过实际案例和具体代码示例,读者可以学习如何使用Python进行网络数据传输、服务搭建等操作。 此外,书中还介绍了Python网络自动化方面的应用。网络自动化网络工程师的重要技能之一,可以通过编写Python脚本来实现网络设备的自动配置、监控和管理等任务。通过学习本书,读者可以了解如何使用Python编写自动化脚本,提高网络管理效率和工作质量。 《网络工程师Python之路》还提供了练习题和项目实践,供读者巩固所学知识和提高解决实际问题的能力。此外,书中还介绍了一些常用的Python网络编程库和工具,如Requests、Scapy等,方便读者扩展和应用。 总的来说,这本书以简单易懂的语言介绍了Python网络工程中的应用,适合网络工程师和对网络编程感兴趣的人阅读。通过学习这本书,读者可以掌握Python的基本语法和网络编程技巧,提高网络工程的效率和质量。 ### 回答3: 《网络工程师Python之路》是一本非常有价值的书籍,可以帮助初学者和有一定编程基础的网络工程师学习和提升Python编程技能。 这本书的主要内容包括Python语言基础、网络编程、Web爬虫、网络安全、数据分析等方面的知识。首先,它会帮助读者掌握Python的基本语法、数据类型、条件语句、循环语句等基础知识,并通过大量实例帮助读者理解并掌握这些知识。 其次,书中还详细介绍了Python网络编程方面的应用。网络工程师可以通过学习此书,掌握使用Python进行网络编程的各种技巧和方法,包括Socket编程、HTTP协议、FTP协议等。这对于搭建网络服务器、实现网络通信功能非常有帮助。 此外,书中还涵盖了Web爬虫的内容,教会读者如何利用Python编写爬虫程序,并解析网页内容,提取所需的信息。对于网络工程师来说,这是一个非常实用的技能,可以帮助他们从网页中获取所需的数据。 此外,书中还涉及了网络安全和数据分析方面的知识。网络安全是网络工程师必须掌握的知识之一,而Python作为一种快速、灵活的编程语言,在网络安全领域也有着广泛的应用。数据分析方面的内容则可以帮助读者应对大数据时代的挑战,利用Python进行数据清洗、处理和分析。 总的来说,《网络工程师Python之路》是一本内容全面、实用性强的书籍。通过阅读和实践,读者可以系统地学习和掌握Python编程语言,并将其运用到网络工程的各个领域。对于想要进一步提升自己在网络工程领域中的竞争力的读者来说,这本书是不可或缺的学习资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值