【Python之路Day12】网络篇之Paramiko
paramiko模块,基于SSH用于连接远程服务器并执行相关操作。
一、安装
pip3 install paramiko
二、使用
1. SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang) import paramiko #创建ssh对象 ssh = paramiko.SSHClient() #允许连接不在Know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器
ssh.connect(hostname='172.16.30.162',port=22,username='root',password='') #执行命令
stdin,stdout,stderr = ssh.exec_command('ls /tmp/') #获取执行结果
result = stdout.read() print(result.decode()) #返回的是bytes #关闭连接
ssh.close()
基于公钥密钥连接:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang) import paramiko private_key = paramiko.RSAKey.from_private_key_file('/Users/daniel/.ssh/id_rsa') # 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='172.16.30.162', port=22, username='root', pkey=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码 上传/下载
#!/usr/bin/env python3
# -*- coding: utf-8 -*-) import paramiko transport = paramiko.Transport(('172.16.30.162',22))
transport.connect(username='root',password='') sftp = paramiko.SFTPClient.from_transport(transport) #上传本地文件/Users/daniel/test/zhoulibo.mp4 上传到服务器的 /tmp/zhoulibo.mp4
sftp.put('/Users/daniel/test/zhoulibo.mp4','/tmp/zhoulibo.mp4') #将远端/tmp/zhoulibo.mp4 下载到 本地 /Users/daniel/zhoulibo.mp4
sftp.get('/tmp/zhoulibo.mp4','/Users/daniel/zhoulibo.mp4') transport.close()
基于公钥/密钥的上传/下载:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang) import paramiko private_key = paramiko.RSAKey.from_private_key_file('/Users/daniel/.ssh/id_rsa') transport = paramiko.Transport(('172.16.30.162',22))
transport.connect(username='root',pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) #上传本地文件/Users/daniel/test/zhoulibo.mp4 上传到服务器的 /tmp/zhoulibo.mp4
sftp.put('/Users/daniel/test/zhoulibo.mp4','/tmp/zhoulibo.mp4') #将远端/tmp/zhoulibo.mp4 下载到 本地 /Users/daniel/zhoulibo.mp4
sftp.get('/tmp/zhoulibo.mp4','/Users/daniel/zhoulibo.mp4') transport.close()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: DBQ(Du Baoqiang) import paramiko,uuid class SSHConnection: def __init__(self,host='172.16.30.162',port=22,username='root',pwd=''):
self.host = host
self.port = port
self.username = username
self.pwd = pwd
self.__k = None def create_file(self):
file_name = str(uuid.uuid4()) #生成一个'46cad739-5937-4312-9156-00753b272581'的文件名 uuid并转换成str
with open(file_name,'w') as f: #打开文件,往里面写一个sb
f.write('sb')
return file_name def run(self):
'''
主方法
:return:
'''
self.connect()
self.upload('/tmp/test.py') #调用upload方法,上传到服务器的/tmp/test.py
self.rename('/tmp/test.py','/tmp/sb.py') #改名为sb.py
self.close() def connect(self):
'''
建立连接
:return:
'''
transport = paramiko.Transport((self.host,self.port))
transport.connect(username=self.username,password=self.pwd)
self.__transport = transport def close(self):
'''
关闭连接
:return:
'''
self.__transport.close() def upload(self,target_path):
'''
连接,上传
:param target_path:
:return:
'''
file_name = self.create_file()
sftp = paramiko.SFTPClient.from_transport(self.__transport)
#上传本地文件 到服务器的 test.py
sftp.put(file_name, target_path) def rename(self, old_path, new_path):
'''
改名, 把/tmp/test.py 改名为 sb.py
:param old_path:
:param new_path:
:return:
'''
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
#执行命令
cmd = "mv %s %s" %(old_path,new_path)
stdin,stdout,stderr = ssh.exec_command(cmd)
res = stdout.read() def cmd(self,command):
'''
可以执行其他命令
:param command:
:return:
'''
self.connect()
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
#执行命令
stdin, stdout, stderr = ssh.exec_command(command)
res = stdout.read()
self.close()
return res ha = SSHConnection() ha.run()
res = ha.cmd('ls')
print(res.decode()) Demo
Demo
【Python之路Day12】网络篇之Paramiko的更多相关文章
- Python之路,Day12 - 那就做个堡垒机吧
Python之路,Day12 - 那就做个堡垒机吧 本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多 ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
- 【Python之路Day12】网络篇之Python操作MySQL
pymysql是Python中操作MySQL的模块,使用方法和MySQLDB几乎一样. 1. 执行SQL语句 #!/usr/bin/env python3 # -*- coding: utf-8 -* ...
- 【Python之路】第二篇--初识Python
Python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...
- 【Python之路】特别篇--事件驱动与异步IO
通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到一个请求,放入一个事件 ...
- 【Python之路】特别篇--Django生产环境部署
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中H ...
- Python之路【第一篇】:Python简介和入门
python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...
- Python之路【第九篇】堡垒机基础&数据库操作
复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...
随机推荐
- C#winform如何最小化主窗口
1.如果不想让程序在任务栏中显示,请把窗体的属性ShowInTaskbar设置为false;2.如果想让程序启动时就最小化,请设置窗体的属性WindowState设置为Minimized.(Minim ...
- Python自动化 【第二篇】:Python基础-列表、元组、字典
本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库, ...
- sublime text3 输入中文的解决方法及注册
让它输入中文的原理就是给sublime text3给打上个补丁libsublime-imfix.so,这个补丁可以直接git回来,或者下载补丁的源码编译安装. Ubuntu可以直接按照下面的教程 su ...
- Oracle优化查询技巧
1. WHERE子句中的连接顺序:Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的 ...
- js 构造函数
//构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(ms ...
- java与微信企业号交互
微信企业号接收消息(使用SpringMVC): http://blog.csdn.net/omsvip/article/details/39480577 微信企业号api: http://qydev. ...
- CSS背景图拉伸自适应尺寸,全浏览器兼容
突然有人问我这个问题,说网上CSS filter的方法在非IE浏览器下不奏效.思考之后,问题之外让我感慨万千啊,很多我们所谓的难题,都会随着时代的发展迎刃而解,或被新的问题所取代. 当CSS背景图片拉 ...
- redis配置认证密码
redis配置密码1.通过配置文件进行配置yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 #requirepass foobared 去掉行前的注释,并修改 ...
- Linux上安装php
1.安装mysql http://blog.csdn.net/wy3552128/article/details/8143686 2.安装配置Apache http://blog.csdn.net ...
- C# 编程指南-事件
来自微软官方的msdn: 首页:https://msdn.microsoft.com/zh-cn/library/ms366768.aspx 1.如何:订阅和取消订阅事件 2.如何:发布符 ...