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 14 Python
Python3写入文件常用方法实例分析
May 22 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
Python代码缩进和测试模块示例详解
May 07 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
Python I/O与进程的详细讲解
Mar 08 Python
基于Python解密仿射密码
Oct 21 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
Python使用protobuf序列化和反序列化的实现
May 19 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 select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php文件操作相关类实例
2015/06/18 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
EJB timer的种类
2014/10/28 面试题
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
干部选拔任用方案
2014/05/26 职场文书
欢迎词范文
2015/01/27 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
flex弹性布局详解
2022/03/20 HTML / CSS
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS
windows系统安装配置nginx环境
2022/06/28 Servers