使用Python脚本实现SSH登录设备

2de8186da699bdf3fea6128b7bf00acd.gif

正文共: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工具。

3df70bf89bdf1ea0541b5b0bdeacc8bd.png

接下来,在打开的PyCharm工具中,我们选择顶部菜单栏中“File”下的“Settings”,在设置对话框中,选择“Project”下的“Project Interpreter”

a802de5e35b1ba7b651dc0591f51e282.png

在项目解释器列表中,我们没有看到Paramiko。然后我们单击上方的“+”按钮来添加新的Python包,在弹出的对话框中,搜索“Paramiko”,单击“Install Package”按钮,等待安装完成。

45d44a3e353003ae875a7e4e3e753a20.png

或者在命令行通过以下命令进行安装。

pip install paramiko

安装完成后,需要在Python脚本中加载Paramiko库。

import paramiko

首先,我们创建一个SSH客户端对象的实例ssh,调用paramiko库中的SSHClient类的构造函数,SSHClient类封装了与远程SSH服务器进行交互所需的方法和逻辑,如连接远程服务器connect()和执行命令exec_command()等与SSH有关的操作。

ssh = paramiko.SSHClient()

在SSH登录设备时,我们经常看到添加主机key的提示,一般需要手工确认。

be8871ca24baf22f9b1b5de81315eb7b.png

在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地址。

7ea6fdda6fbcf2c4938d48d9ca0c469c.png

把这个命令放到脚本当中,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()

将各部分代码汇总如下:

45feafccea867df1ed92afc52ff6a20c.png

Debug没有报错,执行一下。

89ee032268dd922f1c04ea03decae527.png

显示结果与系统查看一致。

如果要执行多条命令,只要在下面添加命令和输出即可。

42b791f36f620442461be5d00e10990c.png

然后我们试试执行配置命令是否生效。

# 加载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()

f20efc45ec2ffa0cb4de77eefb591f67.png

可以生效,关闭防火墙命令执行成功。

af3df32142846ced475fb60cd422eea1.gif

长按二维码
关注我们吧

fb624d9cc88e59c6908f6dc182480072.jpeg

c3548d30a678606a27d1c2e2a478e42f.png

Juniper虚拟防火墙vSRX部署初体验

将Juniper虚拟防火墙vSRX部署在ESXi进行简单测试

软考网络规划师复习第六章:基础网络实验

网络之路26:STP生成树协议

网络之路27:IRF设备堆叠

网络之路28:二层链路聚合

Windows Server 2019配置多用户远程桌面登录服务器

Windows Server调整策略实现999999个远程用户用时登录

Windows Server 2019创建并配置AD域控制器

IPv6从入门到精通

SRv6典型配置

付出总有回报,全国SRv6组网实验成功了!

如何在最新版的HCL 5.10.0中导入NFV镜像?

手撸一个自动搭建openVPN服务器的SHELL脚本

Windows部署TensorFlow后识别GPU失败,原因是啥?

CentOS 7配置Bonding网卡绑定

轻轻松松达到1.8 Gbps,果然HCL还是搭配高档电脑更好使

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值