一、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基础的更多相关文章

  1. Python之paramiko模块

    今天我们来了解一下python的paramiko模块 paramiko是python基于SSH用于远程服务器并执行相应的操作. 我们先在windows下安装paramiko 1.cmd下用pip安装p ...

  2. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  3. python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

    python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...

  4. 如何进行服务器的批量管理以及python 的paramiko的模块

    最近对公司的通道机账号进行改造管理,全面的更加深入的理解了公司账号管理的架构.(注:基本上所有的机器上的ssh不能使用,只有部分机器能够使用.为了安全的角度考虑,安装的不是公版的ssh,而都是定制版的 ...

  5. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  6. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  7. python 多线程 paramiko实现批量命令输入输出

    远程批量执行命令 实现多线程执行 速度快 实现多并发登录 #-*- coding: utf-8 -*- #!/usr/bin/python import paramiko import threadi ...

  8. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  9. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

随机推荐

  1. vs 2005 使用 boost regex

    第一步: Boost 入门及其VS2005下编译boost库  boost.regex库安装指南  深入浅出之正则表达式(一)  C++中三种正则表达式比较(C regex,C ++regex,boo ...

  2. Android驱动之JNI编写

    要想用java去调用C函数接口那么就需要使用JNI(Java Native Interface,Java 本地调用)去访问本地的动态链接库. 关于NDK的安装,现在有linux环境下的版本,也有win ...

  3. Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat

    刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...

  4. linux 下mysql的安装,并设置必要的密码

    首先,我使用的是redhat linux ,版本号为: [root@localhost init.d]# cat /proc/version Linux version - (bhcompile@po ...

  5. iOS中的translucent和automaticallyAdjustsScrollViewInsets用法

    关于这两个属性我长话短说 具体的可以更具具体情况来设置: translucent用法 automaticallyAdjustsScrollViewInsets用法 translucent用法 iOS7 ...

  6. Linux (Ubuntu) 下配置VPN服务器

    昨天网上找了下VPN的相关信息,居然各种撞墙,特别郁闷,自己不容易找到的东西,记录下VPN的配置信息 ubuntu 13.1下配置VPN  ,采用PPTP实现, 第一步.安装pptpd,没有安装包记得 ...

  7. JSON认识

    阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用JSON 在.NET中如何使用JSON 总结 JSON的全称是”JavaScript Object Notation”,意思是Java ...

  8. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...

  9. Node.js 文件系统

    Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个 ...

  10. 启动本地Oracle

    net start OracleOraDb10g_home1TNSListenernet start OracleServiceORCL第一个是监听服务第二个是数据库服务