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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
sublime text 3配置使用python操作方法
Jun 11 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python数据类型之Dict字典实例详解
May 07 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python实现抠图给证件照换背景源码
Aug 20 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
Python tkinter模版代码实例
Feb 05 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 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
php的mssql数据库连接类实例
2014/11/28 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python实现的系统实用log类实例
2015/06/30 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
Python中turtle库的使用实例
2019/09/09 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
世界最大的票务市场:viagogo
2017/02/16 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
物理力学求职信
2014/02/18 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
学校募捐倡议书
2014/05/14 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
2015年语文教师工作总结
2015/05/25 职场文书