Python之paramiko基础
一、Paramiko模块
paramiko是一个自由和开放源码模块使用,实现SSH2协议安全(认证和加密)连接到远程计算机.
二、windwos下安装paramiko模块
#在DOS命令行执行如下命令
pip3 install paramiko
三、在centos下安装paramiko模块
1)下载paramiko安装包:
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.14.0.tar.gz
2)解压缩文件
tar -xzf paramiko-1.14.0.tar.gz cd paramiko-1.14.0 执行命令: python setup.py install 安装完成后进入到demos目录中运行如下命令检测安装结果: python demo.py localhost
可能出现问题: http://www.cnblogs.com/hyli/p/3910585.html
3、可能出现的问题
a.ImportError: No module named ecdsa
解决办法:
下载安装包:https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz#md5=8ef586fe4dbb156697d756900cb41d7c
cd ecdsa-0.11 解压缩:
tar -xzf ecdsa-0.11.tar.gz
python setup.py install
b.ImportError: No module named Crypto.PublicKey 解决办法:
yum -y install pycrypto
四、paramiko简单使用
1)SSHClient:用于连接远程服务器并执行基本命令
基于用户名和密码进行连接
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko
#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname="192.168.1.104",port = 22,username='lcj',password='123123')
#执行操作:
stdin,stdout,stderr = ssh.exec_command('ls')
#获取执行结果
result = stdout.read()
print(result)
#关闭连接
ssh.close()
2)分装用户和密码连接执行命令
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko
#链接服务器
transport = paramiko.Transport(('192.168.1.152',22))
transport.connect(username='xiaoluo',password='123456')
#创建SSH对象
ssh = paramiko.SSHClient()
ssh._transport = transport #将链接对象引用给ssh进行连接
#执行操作:
stdin,stdout,stderr = ssh.exec_command('du')
#获取执行结果
print(stdout.read())
#关闭连接
transport.close()
3)基于公钥秘钥连接
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')#私钥路径 # 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.1.152', port=22, username='xiaoluo', key=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result) # 关闭连接
ssh.close()
SSHClient封装Transport
SFTPClient
用于连接远程服务器并执行上传下载
1)基于用户名和密码上传下载
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko
#创建paramiko与服务器之间链接
transport = paramiko.Transport(('192.168.1.152',22))
transport.connect(username='root',password='123456')
#创建传输通道
sftp = paramiko.SFTPClient.from_transport(transport)
# paramiko001.py 上传至服务器 /home/ww.py 修改文件名为:ww.py
# sftp.put('paramiko001.py', '/home/ww.py')
# 将remove_path 下载到本地 local_path
sftp.get('/home/ww.py', 'local_path')
#关闭连接
transport.close()
2)基于公钥密码上传下载:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko
#创建公钥:/home/auto/.ssh/id_rsa公钥路径
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
#建立与服务器链接
transport = paramiko.Transport(('192.168.1.152',22))
transport.connect(username='root',pkey=private_key)
#建立文件传输管道
sftp = paramiko.SSHClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('paramiko001.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
# sftp.get('remove_path', 'local_path')
#关闭连接
transport.close()
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:lcj
import paramiko
import uuid
#创建SSH对象
class SSHConnection(object):
#连接服务器,并将信息保存至内存中
def __init__(self, host='192.168.1.152', port=22, username='xiaoluo',pwd=''):
self.host = host
self.port = port
self.username = username
self.pwd = pwd
self.__k = None def run(self):
self.connect()
pass
self.close() def connect(self):
transport = paramiko.Transport((self.host,self.port))
transport.connect(username=self.username,password=self.pwd)
self.__transport = transport def close(self):
self.__transport.close() def cmd(self, command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 执行命令
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令结果
result = stdout.read()
return result
#创建上传下载函数
def upload(self,local_path, target_path):
# 连接,上传
sftp = paramiko.SFTPClient.from_transport(self.__transport)
# 将location.py 上传至服务器 /tmp/test.py
# sftp.put('fort-KEY.py', target_path)
sftp.put('fort-KEY.py', '/home/xiaoluo/dd.py')
# sftp.get('')
ssh = SSHConnection()
ssh.connect() r1 = ssh.cmd('df')
print(r1)
#将文件paramiko001.py上传至/home/xiaoluo/ff.py并修改文件为ff.py
ssh.upload('paramiko001.py', "/home/xiaoluo/fc.py") #关闭连接
ssh.close()
demo
多线程执行批量主机执行命令(等待更新)
Python之paramiko基础的更多相关文章
- Python之paramiko模块
今天我们来了解一下python的paramiko模块 paramiko是python基于SSH用于远程服务器并执行相应的操作. 我们先在windows下安装paramiko 1.cmd下用pip安装p ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...
- 如何进行服务器的批量管理以及python 的paramiko的模块
最近对公司的通道机账号进行改造管理,全面的更加深入的理解了公司账号管理的架构.(注:基本上所有的机器上的ssh不能使用,只有部分机器能够使用.为了安全的角度考虑,安装的不是公版的ssh,而都是定制版的 ...
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- python 多线程 paramiko实现批量命令输入输出
远程批量执行命令 实现多线程执行 速度快 实现多并发登录 #-*- coding: utf-8 -*- #!/usr/bin/python import paramiko import threadi ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
随机推荐
- PHP 小方法之 写日志方法
if(! function_exists ('write_log') ) { function write_log($data, $name='debug', $date=null){ if (is_ ...
- Android系统架构-----Android的系统体系架构
一.Android的系统体系结构 在入门了一个简单的Android的Hello World以后,我们首先来看一下我们Android的整体系统架构图: 这个就是我们Android的整体系统架构图了,我们 ...
- Android之alertDialog、ProgressDialog
一.alertDialog 置顶于所有控件之上的,可以屏蔽其他控件的交互能力.通过AlertDialog.Builder创建一个AlertDialog,并通过setTittle(),setMesseg ...
- 读javascript高级程序设计12-HTML5脚本编程
一.跨文档消息传递(XDM) 1.发送消息 postMessage(msg,domain)用于发送跨文档消息.第一个参数是要传递的消息内容,第二个参数表示接收方来自哪个域.第二个参数有助于提高安全性, ...
- MVC发布问题(一直显示目录浏览)
写了一个MVC的Demo,发布之后一直显示目录浏览,始终无法展示网站. 步骤如下: 1.生成解决方案,发布应用程序 2.打开IIS,新建网站,选择发布程序的代码路径 3.设置应用程序池为4.0,集成 ...
- Windows Store App 用户库文件分组
在Windows应用商店应用程序中浏览用户库中的文件时,可以将文件或者文件夹分组显示,以便于进行分类浏览,这类似于音乐库中的文件可以按照艺术家名称.创建日期或者评级等多种方式进行分类.本节内容将会介绍 ...
- macbook上实现MacOS+Windows8+Ubuntu三系统
至于为什么要装win和linux就不说了,本文只解释安装过程. GPT vs MBR MacOS下装另外两个系统的一个基本问题是:硬盘使用GPT分区,它和常见的MBR分区是两个硬盘分区方式. 它们的主 ...
- 怎么获取iOS的私有API
前言 作为iOS开发人员,相信大多数伙伴都对怎么获取iOS的私有API很有兴趣,最近通过查找资料,总结了以下三种方法,希望对你有用. 第一种(class-dump) 不得不说这是一个很棒的工具,安装和 ...
- nodejs gulp less编辑
nodejs 下载地址:http://pan.baidu.com/s/1bnz2oPp 提取密码:0mip 1.最简单的编译less 在安装好nodejs后,cmd 进入控制台 安装 lessc : ...
- android WebView总结
http://blog.csdn.net/chenshijun0101/article/details/7045394 http://blog.csdn.net/ethan_xue/article/d ...