python 之 Paramiko学习
paramiko模块,基于SSH用于连接远程服务器并执行相关操作。
一、安装
- pip3 install paramiko
二、使用
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='192.168.1.103',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 python
- # -*- coding: utf-8 -*-
- # auth : pangguoping
- 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='192.168.1.103', 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 python
- # -*- coding: utf-8 -*-
- import paramiko
- transport = paramiko.Transport(('192.168.1.103',22))
- transport.connect(username='root',password='')
- sftp = paramiko.SFTPClient.from_transport(transport)
- #上传本地文件/Users/daniel/test/zhoulibo.mp4 上传到服务器的 /tmp/test.mp4
- sftp.put('/Users/daniel/test/test.mp4','/tmp/test.mp4')
- #将远端/tmp/zhoulibo.mp4 下载到 本地 /Users/daniel/test.mp4
- sftp.get('/tmp/zhoulibo.mp4','/Users/daniel/test.mp4')
- transport.close()
基于公钥/密钥的上传/下载:
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import paramiko
- private_key = paramiko.RSAKey.from_private_key_file('/Users/daniel/.ssh/id_rsa')
- transport = paramiko.Transport(('192.168.1.103',22))
- transport.connect(username='root',pkey=private_key)
- sftp = paramiko.SFTPClient.from_transport(transport)
- #上传本地文件/Users/daniel/test/tt.mp4 上传到服务器的 /tmp/tt.mp4
- sftp.put('/Users/daniel/test/tt.mp4','/tmp/tt.mp4')
- #将远端/tmp/tt.mp4 下载到 本地 /Users/daniel/tt.mp4
- sftp.get('/tmp/tt.mp4','/Users/daniel/tt.mp4')
- transport.close()
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import paramiko,uuid
- class SSHConnection:
- def __init__(self,host='192.168.1.103',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
python 之 Paramiko学习的更多相关文章
- Python之paramiko模块和SQL连接API
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: i ...
- python 之 paramiko
""" 对app进行一些路由设置 """ """ 对socketio进行一些监听设置 "" ...
- Python 应用领域及学习重点
笔者认为不管学习什么编程语言,首先要知道:学完之后在未来能做些什么? 本文将浅谈 Python 的应用领域及其在对应领域的学习重点.也仅是介绍了 Python 应用领域的"冰山一角" ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...
- 如何进行服务器的批量管理以及python 的paramiko的模块
最近对公司的通道机账号进行改造管理,全面的更加深入的理解了公司账号管理的架构.(注:基本上所有的机器上的ssh不能使用,只有部分机器能够使用.为了安全的角度考虑,安装的不是公版的ssh,而都是定制版的 ...
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- 从Theano到Lasagne:基于Python的深度学习的框架和库
从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...
- Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习
http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...
随机推荐
- Tree( 树) 组件[2]
本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...
- sqlserver中的序列
序列是由用户定义的绑定到架构的对象.序列依据定义的间隔按升序或降序生成,并可配置为用尽时重新启动(循环).序列不与特定表关联.序列与表之间的关系由应用程序进行控制. 创建序列的语法: CREATE S ...
- <httpProtocol/>配置http协议头
Web.Config中的位置 <configuration> <system.webServer> <httpProtocol> <!--http协议内容-- ...
- windows server 2003 AD
本文转载:http://www.cnblogs.com/zfanlong1314/admin/EditPosts.aspx?opt=1 今天教大家用windows server2003系统建立Acti ...
- 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
Problem Description 求Sn=2+22+222+…+22…222(有n个2)的值. 例如:2+22+222+2222+22222(n=5),n由键盘输入. Input n Outpu ...
- GDI相关基础知识
原文链接:http://blog.csdn.net/poem_qianmo/article/details/7333886 GDI(Graphics Device Interface) 图形设备接口, ...
- php测试题整理(0519)
1.B/S架构和C/S架构: B/S架构是依托于浏览器的网络系统,C/S架构是基于客户端的. B/S架构: 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放.互 ...
- Flask学习记录之Flask-Migrate
一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...
- iOS开发之Runtime函数
1.可以通过NSObject的一些方法获取运行时信息或动态执行一些消息: 1./*Returns a Boolean value that indicates whether the receivin ...
- ScrollView嵌套listview 时根据内容动态设置listview高度
public static void setListViewHeightBasedOnChilds(ListView listView){ ListAdapter listAdapter = list ...