Python使用paramiko操作linux的方法讲解


Posted in Python onFebruary 25, 2019

paramiko介绍

paramiko是一个基于python编写的、使用ssh协议的模块,跟xshell和xftp功能类似,支持加密与认证,可以上传下载和访问服务器的文件。

可以利用paramiko模块写服务器脚本,在本地执行,比如持续更新代码,查看日志,批量配置集群等。

paramiko 主要包含SSHClient和SFTPClient两个组件:

SSHClient

ssh服务会话的表示,通常用来执行命令,主要有connect、exec_command、load_system_host_keys和set_missing_host_key_policy方法。

  • connect:建立SSH远程连接并校验。
  • exec_command:执行指令并返回结果。
  • load_system_host_keys:加载本地公钥校验文件。
  • set_missing_host_key_policy:远程主机没有本地主机密钥或HostKeys时的策略。

SFTPClient

SFTP客户端对象,实现远程文件操作,主要有from_transport、put、get、Mkdir、remove、rename、stat、listdir等方法。

  • from_transport:从已通过验证的传输对象简历连接。
  • put:上传本地文件到服务器上。
  • get:从服务器下载文件到本地。
  • Mkdir、remove、rename、stat、listdir:创建目录、删除目录、重命名文件或目录、获取文件信息、获取指定目录中的列表。

安装与使用

安装

pip install paramiko

执行linux命令

import paramiko
#服务器信息,主机名(IP地址)、端口号、用户名及密码
hostname = "xxx.xxx.xx.170"
port = 11022
username = "rdadmin"
password = "818"
#创建SSH对象 
client = paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
client.connect(hostname, port, username, password, compress=True)
# 执行linux命令
stdin, stdout, stderr = client.exec_command('ls /')
for line in stdout:
  print('... ' + line.strip('\n')) 
#or
print(stdout.readlines())

访问linux上的文件

import paramiko
hostname = "192.168.0.1"
port = 22
username = "root"
password = "root"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password, compress=True)
sftp_client = client.open_sftp()
remote_file = sftp_client.open("/home/verified_list.txt") #文件路径
try:
  for line in remote_file:
    print(line.strip())
finally:
  remote_file.close()

上传到linux与从linux下载文件

import paramiko
hostname = 192.168.0.1
port = 22
username = "root"
password = "root"
transport = paramiko.Transport((hostname, port))
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
# 下载文件
sftp.get("/home/share/video.mp4","./视频文件下载/")
#上传文件
sftp.put("./video.mp4","/home/share/video.mp4")
sftp.close()

与linux的交互操作

通过SSHClient的invoke_shell方法,可以创建一个交互会话的对象,和exec_command方法不同的是,这个可以实现命令交互,比如先cd到某个目录下,再执行脚本操作,然后退出,这种需要多个步骤的操作。

import paramiko
hostname = "192.168.0.1"
port = 22
username = "root"
password = "root"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password, compress=True)
channel = client.invoke_shell() # 在SSH server端创建一个交互式的shell
command = ""
channel.send(command + '\n')
time.sleep(10)
stdout = channel.recv(1024*100000)
out_list = stdout.decode().split("\n")
client.close()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python实现全排列的打印
Aug 18 Python
python查看模块安装位置的方法
Oct 16 Python
python networkx 根据图的权重画图实现
Jul 10 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
wxpython布局的实现方法
Nov 01 Python
Django后台管理系统的图文使用教学
Jan 20 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
5款实用的python 工具推荐
Oct 13 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 #Python
Python判断对象是否相等及eq函数的讲解
Feb 25 #Python
详解django中url路由配置及渲染方式
Feb 25 #Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
You might like
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
Python中动态检测编码chardet的使用教程
2017/07/06 Python
快速了解Python中的装饰器
2018/01/11 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
在pycharm中实现删除bookmark
2020/02/14 Python
大学毕业生通用求职信
2013/09/28 职场文书
简历自我评价模版
2014/01/31 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
党员检讨书
2014/10/13 职场文书
顶岗实习计划书
2015/01/16 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
田径运动会通讯稿
2015/07/18 职场文书
会计岗位工作总结
2015/08/12 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书