14.python笔记之paramiko
作者:刘耀
博客:www.liuyao.me
博客园:www.cnblogs.com/liu-yao
转载请注明
一,介绍
1.使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。
二,安装
1. window7(64位):
1.pip install --use-wheel --no-index --find-links=https://github.com/
sfbahr/PyCrypto-Wheels/raw/master/pycrypto-2.6.1-cp35-none-win_amd64.whl pycrypto
2.pip install paramiko
3.修改python解释器目录下的\Lib\site-packages\Crypto\Random\OSRNG\nt.py
第28行
import winrandom 修改成 from Crypto.Random.OSRNG import winrandom
注:参考http://www.cnblogs.com/liwenzhou/p/5246622.html
2.linux(centos):
1.yum -y install gcc python-devel
2.安装pycrypto
pip install pycrypto
3.安装paramiko
pip install paramiko
三,操作
1. 基于用户和密码链接执行命令
import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='115.29.51.8', port=22, username='liuyao', password='123456')
# 或
#ssh.connect("某IP地址",22,"用户名", "口令")
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()
# 打印结果
print(result)
2.封装用户和密码链接执行命令
import paramiko
transport = paramiko.Transport(('115.29.51.8', 22))
transport.connect(username='root', password='123456')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df -h')
transport.close()
print (stdout.read())
3.基于公钥链接执行命令
import paramiko
file_key = '/home/auto/.ssh/id_rsa'
private_key = paramiko.RSAKey.from_private_key_file(file_key)
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='115.29.51.8', port=22, username='root', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()
print(result)
4.封装公钥链接执行命令
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('你的主机名', 22))
transport.connect(username='你的用户名', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df -h')
transport.close()
print (stdout.read())
5.基于用户名密码上传下载
import paramiko
_link = paramiko.Transport(('你的主机',22))
_link.connect(username='你的用户名',password='123')
sftp = paramiko.SFTPClient.from_transport(_link)
# 将你目录/本地文件 上传至服务器 目录/文件
sftp.put('你本地文件', 目标服务器文件')
# 将目标服务器文件 下载到本地 指定目录
sftp.get('目标服务器文件', '你本地目录')
#关闭链接
_link.close()
6.基于公钥链接上传下载
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='你的用户名', pkey=private_key )
sftp = paramiko.SFTPClient.from_transport(transport)
# 将你目录/本地文件 上传至服务器 目录/文件
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将目标服务器文件 下载到本地 指定目录
sftp.get('remove_path', 'local_path')
# 关闭链接
transport.close()
四,案例
多线程执行批量主机执行命令
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import threading
import paramiko
class Anstack(object):
def __init__(self,host,cmd):
#host为变量
self.host = host
self.cmd = cmd
self.port = 22
self.username = 'root'
self.pwd = '123456'
self.run()
def run(self):
#执行方法
self.connect()
self._cmd()
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):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
# 执行命令
stdin, stdout, stderr = ssh.exec_command(self.cmd)
# 获取命令结果
result = stdout.read()
print(result)
if __name__ == '__main__':
args = ['192.168.1.1','192.168.1.2','192.168.1.3','192.168.1.4']
cmd = input('您要执行的命令')
for i in args:
Execcmd = threading.Thread(target=Anstack, args=(i,cmd,))
Execcmd.start()
14.python笔记之paramiko的更多相关文章
- python模块之paramiko
46.python模块之paramiko SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- guxh的python笔记一:数据类型
1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...
- s21day01 python笔记
s21day01 python笔记 一.计算机基础 计算机的初步认识 用户:人 软件:QQ.浏览器等 解释器/编译器/虚拟机:java解释器.python解释器等 操作系统 硬件:CPU.内存.硬盘. ...
- python笔记-1(import导入、time/datetime/random/os/sys模块)
python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...
- python 笔记-转
python笔记 Python 学习笔记 - 14.技巧(Tips) Python 学习笔记 - 13.异常(Exception) Python 学习笔记 - 12.流程控制(Contro ...
- python 笔记2016
列表,元组(不可添加和修改),字典 3种集合模式 模块----类---函数 要把文件变成双击运行,要把文件的属性选择python安装目录下的python.exe 1,查看数据类型 print(type ...
- 第十八章 Python批量管理主机(paramiko、fabric与pexpect)
这个人的文章不错:http://lizhenliang.blog.51cto.com/all/7876557 转载:http://lizhenliang.blog.51cto.com/7876557/ ...
- python笔记(2)--字符串
一.字符串 字符串是不可变序列,具有序列的公共操作方法,具体操作见python笔记(1)--序列(列表 元组 range) 1.创建字符串 单引号:'Hello , I am Logan ! ' 双引 ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
随机推荐
- Oracle自定义函数实例
1. 传入一个值, 如果该值为0,则返回空. CREATE OR REPLACE FUNCTION Fun_Test(p IN NUMBER) RETURN VARCHAR2 IS v_Result ...
- bzoj1069 SCOI2007 最大土地面积
1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2560 Solved: 983 Description ...
- Laravel5.1 启动详解
借鉴: Laravel所有请求的入口文件是:/public/index.php,代码如下 <?php /*|------------------------------------------- ...
- Redis操作+python
自动化接口测试中需要向redis中插入测试数据: 1. 连接redis: import redisself.r = redis.StrictRedis(host=env.REDIS_HOST, por ...
- Mac上的终端(Terminal)启动缓慢
最近重装10.9系统,装完后,发现终端(Terminal)启动之前1秒都不用,现在却需要5-10秒,搜寻了下,发现是终端的统日志导致的问题,只需要执行下下面的命令,终端就又身轻如燕了! sudo rm ...
- Support Vector Machines for classification
Support Vector Machines for classification To whet your appetite for support vector machines, here’s ...
- 51nod 1170 1770 数数字(动态规划)
解题思路:看到题后,直接想到分成两种情况: ①:a*b >9 这里又分成两种 1. n==1 a*b 直接是一个两位数 求得十位和个位(这里十位和个位不可能相等) 然后如果等于d 则结果=1 2 ...
- asp.net在线恢复数据库
用于asp.net还原与恢复SqlServer数据库的KillSpid存储过程 CREATE PROCEDURE KillSpid(@dbName varchar(20)) AS BEGIN DECL ...
- 多线程 用户级线程和内核级线程 from C++多核高级编程
转 http://book.51cto.com/art/201006/206946.htm 6.1.1 用户级线程和内核级线程 2010-06-21 20:37 齐宁/董泽惠 译 清华大学出版社 字号 ...
- Linux下memcache的安装和启动(转)
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.据说官方所说,其用户包括twitter.digg.flickr等,都是些互联网大腕呀.目前用memca ...