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实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
python爬虫增加访问量的方法
Aug 22 Python
Python输出指定字符串的方法
Feb 06 Python
tensorflow 实现数据类型转换
Feb 17 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
关于Python使用turtle库画任意图的问题
Apr 01 Python
总结三种用 Python 作为小程序后端的方式
May 02 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 缓存函数代码
2008/08/27 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
DWR Ext 加载数据
2009/03/22 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Python实现井字棋小游戏
2020/03/09 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
银行行长竞聘演讲稿
2014/04/23 职场文书
综治宣传月活动总结
2014/04/28 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
违章停车检讨书
2014/10/21 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
故意伤害辩护词
2015/05/21 职场文书
战友聚会致辞
2015/07/28 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python