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学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python实现任意位置文件分割的实例
Dec 14 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
Python实现不规则图形填充的思路
Feb 02 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
django model通过字典更新数据实例
Apr 01 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 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日期时间函数的高级应用技巧
2009/05/16 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
js实现列表按字母排序
2020/08/11 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
基于python编写的微博应用
2014/10/17 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
python脚本开机自启的实现方法
2019/06/28 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
数控机械专业个人的自我评价
2014/01/02 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
健康状况证明书
2014/11/26 职场文书
党员评议自我评价
2015/03/03 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年测量员工作总结
2015/05/23 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android