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输出指定月份日历的方法
Apr 23 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
视觉直观感受若干常用排序算法
Apr 13 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
浅析python参数的知识点
Dec 10 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Python类及获取对象属性方法解析
Jun 15 Python
python爬虫 requests-html的使用
Nov 30 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
Adodb的十个实例(清晰版)
2006/12/31 PHP
DedeCms模板安装/制作概述
2007/03/11 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
JS之相等操作符详解
2016/09/13 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python如何获取系统iops示例代码
2016/09/06 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
导致python中import错误的原因是什么
2020/07/01 Python
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
建筑实习自我鉴定
2013/10/18 职场文书
2015年春节标语口号
2014/12/09 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
创业计划书之家教托管
2019/09/25 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android