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简单猜数游戏实例
Jul 09 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python如何生成各种随机分布图
Aug 27 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
如何通过Python实现标签云算法
Jul 02 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
python列表的逆序遍历实现
Apr 20 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
opencv读取视频并保存图像的方法
Jun 04 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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个人网站架设连环讲(一)
2006/10/09 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
Web程序工作原理详解
2014/12/25 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
js jquery数组介绍
2012/07/15 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
公务员总结性个人自我评价
2013/12/05 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
干部下基层实施方案
2014/03/14 职场文书
一年级学生评语
2014/04/23 职场文书
小学优秀学生评语
2014/12/29 职场文书
项目合作意向书
2015/05/08 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript