正文共:1111 字 9 图,预估阅读时间:6 分钟
如果没有自动化的管理工具,我们管理设备还要一台一台的去查看;有了自动化之后,理论上这个问题能得到极大改善。
前面我们介绍了Python的安装(如何使用Python提取Excel中固定单元格的内容),以及如何通过Python读取EXCEL的数据(使用Python批量处理Excel的内容),那能不能使用Python来实现设备的自动化管理呢?我们今天来试试。
经过了解,Python的Paramiko库是一个功能丰富的SSH工具包,能够实现多种与SSH相关的功能,例如建立SSHv2协议的安全连接,通过exec_command()方法执行远程服务器上的命令、并捕获其标准输出和标准错误输出;还可以实现安全文件传输协议(Secure File Transfer Protocol,SFTP),模拟简单的交互式会话操作,支持隧道和端口转发等等。可以用于自动化运维任务、远程脚本执行、数据同步等各种涉及SSH协议的场景。
还是跟之前一样,我们先创建一个记事本文件;然后,将文件名后缀改为了.py,并双击运行此文件已进入到PyCharm工具。
接下来,在打开的PyCharm工具中,我们选择顶部菜单栏中“File”下的“Settings”,在设置对话框中,选择“Project”下的“Project Interpreter”。
在项目解释器列表中,我们没有看到Paramiko。然后我们单击上方的“+”按钮来添加新的Python包,在弹出的对话框中,搜索“Paramiko”,单击“Install Package”按钮,等待安装完成。
或者在命令行通过以下命令进行安装。
pip install paramiko
安装完成后,需要在Python脚本中加载Paramiko库。
import paramiko
首先,我们创建一个SSH客户端对象的实例ssh,调用paramiko库中的SSHClient类的构造函数,SSHClient类封装了与远程SSH服务器进行交互所需的方法和逻辑,如连接远程服务器connect()和执行命令exec_command()等与SSH有关的操作。
ssh = paramiko.SSHClient()
在SSH登录设备时,我们经常看到添加主机key的提示,一般需要手工确认。
在Python中,我们可以使用paramiko.AutoAddPolicy自动添加主机key至本地缓存,当连接到一个新主机并且其公钥不在本地缓存中时,客户端将会自动接受并添加这个新公钥到缓存中,然后继续建立连接,而不中断连接过程或抛出异常。
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
然后就可以配置使用connect()连接到远程主机了,配置IP地址、端口、用户名和密码等信息。
ssh.connect(hostname='192.168.1.42', port=22, username='root', password='qwe123!@#')
接下来,就可以通过exec_command()执行命令获取输出了。比如我们在命令行查看接口的IP地址。
把这个命令放到脚本当中,stdin是标准输入对象,通常用于向命令提供输入;stdout是标准输出对象,表示命令执行后的正常输出结果;stderr是标准错误输出对象,表示命令执行过程中产生的错误信息或其他非正常输出。
stdin, stdout, stderr = ssh.exec_command('ip addr show ens192')
使用stdout.read()读取标准输出缓冲区的所有内容,返回的是原始字节形式的数据,因为网络传输和操作系统间可能存在编码差异,所以通常是字节流形式。然后使用.decode()将读取到的字节流解码为字符串,以便在Python中进一步处理和显示。如果不指定编码,默认使用UTF-8编码解码。
output = stdout.read().decode()
最后使用print()输出接口就可以了。
print(output)
最后,使用close()关闭连接,以减少系统资源占用,减低安全风险。
ssh.close()
将各部分代码汇总如下:
Debug没有报错,执行一下。
显示结果与系统查看一致。
如果要执行多条命令,只要在下面添加命令和输出即可。
然后我们试试执行配置命令是否生效。
# 加载Paramiko库
import paramiko
# 创建SSH客户端对象
ssh = paramiko.SSHClient()
# 自动添加主机key至本地缓存
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 配置登录信息
ssh.connect(hostname='192.168.1.42', port=22, username='root', password='qwe123!@#')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('systemctl status firewalld')
output = stdout.read().decode()
print("防火墙当前状态为:\n",output)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('systemctl stop firewalld')
print("关闭防火墙……")
# 执行命令
stdin, stdout, stderr = ssh.exec_command('systemctl status firewalld')
output = stdout.read().decode()
print("防火墙当前状态为:\n",output)
# 关闭连接
ssh.close()
可以生效,关闭防火墙命令执行成功。
长按二维码
关注我们吧
将Juniper虚拟防火墙vSRX部署在ESXi进行简单测试
Windows Server 2019配置多用户远程桌面登录服务器
Windows Server调整策略实现999999个远程用户用时登录
Windows Server 2019创建并配置AD域控制器
Windows部署TensorFlow后识别GPU失败,原因是啥?
轻轻松松达到1.8 Gbps,果然HCL还是搭配高档电脑更好使