Python使用paramiko连接远程服务器执行Shell命令的实现


Posted in Python onMarch 04, 2021

需求

自动化测试场景里, 有时需要在代码里获取远程服务器的某些数据, 或执行一些查询命令,如获取Linux系统版本号 \ 获取CPU及内存的占用等, 本章记录一下使用paramiko模块SSH连接服务器的方法

1. 先安装paramiko库

pip3 install paramiko

2. 代码

#!/usr/bin/env python
# coding=utf-8

"""
# :author: Terry Li
# :url: https://blog.csdn.net/qq_42183962
# :copyright: © 2020-present Terry Li
# :motto: I believe that the God rewards the diligent.
"""
import paramiko

class cfg:
	host = "192.168.2.2"
	user = "root"
	password = "123456"


class sshChannel:
	def __init__(self, cfg_obj, timeout_s=5, port=22):
		self._cfg = cfg_obj
		self.ssh_connect_timeout = timeout_s
		self.port = port
		self.ssh = self.connect_server()

	def connect_server(self):
		ssh_cli = paramiko.SSHClient()
		key = paramiko.AutoAddPolicy()
		ssh_cli.set_missing_host_key_policy(key)
		try:
			ssh_cli.connect(self._cfg.host, port=self.port, username=self._cfg.user, password=self._cfg.password,
							timeout=self.ssh_connect_timeout)
		except paramiko.ssh_exception.SSHException:
			print("连接{}失败, 请检查配置或重试".format(self._cfg.host))
			ssh_cli.close()
		return ssh_cli

	def execute_cmd(self, cmd):
		"""
		:param cmd: 单个命令
		:return: 服务器的输出信息
		"""
		stdin, stdout, stderr = self.ssh.exec_command(cmd)
		self.ssh.close()
		return stdout.read().decode('utf-8')

	def execute_cmd_list(self, cmd_list):
		"""
		:param cmd: 命令列表
		:return: 服务器的输出信息的列表
		"""
		out_list = list(map(self.execute_cmd, cmd_list))
		return out_list

	def test_get_sys_version(self):
		sys_version = self.execute_cmd("lsb_release -rd")
		print(sys_version)

	def test_get_sys_disk_free_and_memory_free(self):
		sys_info = self.execute_cmd_list(["df -h -BG /", "free -m"])
		print(sys_info)
		
if __name__ == '__main__':
	server = sshChannel(cfg)
	server.test_get_sys_version()
	server.test_get_sys_disk_free_and_memory_free()

到此这篇关于Python使用paramiko连接远程服务器执行Shell命令的实现的文章就介绍到这了,更多相关Python使用paramiko连接远程服务器执行Shell命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python中的try和finally和with方法
May 05 Python
python中利用Future对象回调别的函数示例代码
Sep 07 Python
谈谈python中GUI的选择
Mar 01 Python
python实现梯度下降算法
Mar 24 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
Python实现时间序列可视化的方法
Aug 06 Python
python__name__原理及用法详解
Nov 02 Python
python怎么自定义捕获错误
Jun 29 Python
Python 调用C++封装的进一步探索交流
Mar 04 #Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 #Python
Python与C/C++的相互调用案例
Mar 04 #Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 #Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 #Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 #Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 #Python
You might like
一个颜色轮换的简单例子
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP 输出简单动态WAP页面
2009/06/09 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
python实现实时监控文件的方法
2016/08/26 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
如何设置Java的运行环境
2013/04/05 面试题
抗震救灾标语
2014/06/26 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
学校教师培训工作总结
2015/10/14 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL