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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python之PyUnit单元测试实例
Oct 11 Python
Python进程间通信之共享内存详解
Oct 30 Python
python reduce 函数使用详解
Dec 05 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
python调用matlab的m自定义函数方法
Feb 18 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
Python实现自动装机功能案例分析
Oct 22 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也可以?成Shell Script
2006/10/09 PHP
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
2009/08/04 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
简单解决Python文件中文编码问题
2015/11/22 Python
Python中反射和描述器总结
2018/09/23 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
怎么处理XML的中文问题
2015/03/26 面试题
中专生自荐信
2013/10/12 职场文书
餐厅筹备计划书
2014/04/25 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
对照检查剖析材料
2014/09/30 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server