paramiko模块
安装:
# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
(1)
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz
tar -zxvf pycrypto-2.6.tar.gz
cd pycrypto-2.6/
python setup.py build && python setup.py install (可能报错)
python>> import Crypto
这是因为缺少python-dev的软件包,所:yum -y install python-devel (编译时报错:error: command 'gcc' failed with exit status 1;这是因为缺少python-dev的软件包,所yum -y install python-devel)
(2)
get http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz
tar xvzf paramiko-1.7.7.1.tar.gz
cd paramiko-1.7.7.1/
python setup.py build && python setup.py install # 进入python环境,导入paramiko检查是否安装成功
1.paramiko执行命令(用户名密码方式),(分为用SSHClient对象与Transport对象两种)
#!/bin/usr/env python
#-*- coding:utf-8 -*-
import paramiko ssh = paramiko.SSHClient()# 创建SSH对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在know_hosts文件中的主机
ssh.connect(hostname='10.1.1.10', port=22, username='ganzl', password='')# 连接服务器
stdin, stdout, stderr = ssh.exec_command('df')# 执行命令
result = stdout.read()# 获取命令结果
print result ssh.close() # 关闭连接
#!/bin/usr/env python
#-*- coding:utf-8 -*- import paramiko transport = paramiko.Transport(('10.1.1.10', 22))
transport.connect(username='ganzl', password='') ssh = paramiko.SSHClient()
ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read() transport.close()
2.paramiko执行命令(公钥方式),(分为用SSHClient对象与Transport对象两种)
#-*- coding:utf-8 -*-
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/ganzl/.ssh/id_rsa') ssh = paramiko.SSHClient()# 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 允许连接不在know_hosts文件中的主机
ssh.connect(hostname='10.1.1.10', port=22, username='ganzl',pkey=private_key)# 连接服务器
stdin, stdout, stderr = ssh.exec_command('df')# 执行命令
result = stdout.read()# 获取命令结果
print result ssh.close()# 关闭连接
#!/bin/usr/env python
#-*- coding:utf-8 -*- import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/ganzl/.ssh/id_rsa')
transport = paramiko.Transport(('10.1.1.10', 22))
transport.connect(username='ganzl', pkey=private_key) ssh = paramiko.SSHClient()
ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df')
print stdout
print stdin
print stderr transport.close() 这个在执行结果上如下:
-----------------------
<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x2407eb10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x2407eb10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>
<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x2407eb10L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>> 这个方式的执行结果有时间了,再整明白下。
3.FTP进行上传下载文件
#!/bin/usr/env python
#-*- coding:utf-8 -*-
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/ganzl/.ssh/id_rsa')
transport = paramiko.Transport(('10.1.1.10', 22))
transport.connect(username='ganzl', pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport)#然后创建SFTPClient并基于transport连接,把他俩做个绑定
sftp.put('/home/ganzl/bak/beifen-lianlian.sh', '/home/ganzl/bak/beifen-lianlian.sh')
sftp.get('/home/ganzl/bak/test.sh', '/home/ganzl/bak/test.sh')
transport.close()
#-*- coding:utf-8 -*-
import paramiko transport = paramiko.Transport(('10.1.1.10',22))
transport.connect(username='ganzl',password='') sftp = paramiko.SFTPClient.from_transport(transport) sftp.put('/home/ganzl/bak/beifen-lianlian.sh', '/home/ganzl/bak/beifen-lianlian.sh')
sftp.get('/home/ganzl/bak/test.sh', '/home/ganzl/bak/test.sh') transport.close()
为什么要搞两种方式,应该是SSHClient对象不支持文件的上次下载,而Transport这个类是对SSHClient类的封装。
写代码的时候,尽量放到一起。
用面向对象的方式将登入,执行命令,上次下载放到不同的方法里:
#!/sur/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'ganzl'
import uuid
import paramiko class properties(object):
def __init__(self):
self.host = '10.1.1.10'
self.port = 22
self.username = 'ganzl'
self.password = '123456' def creat_file(self):
str_file = str(uuid.uuid4())
with open(str_file,'w') as f:
f.write('写入配置文件内容,或者拿到配置文件')
return str_file def connect(self):
transport = paramiko.Transport((self.host,self.port))
transport.connect(username=self.username,password=self.password)
self.conn = transport def close(self):
self.conn.close() def upload(self):
file_name = self.creat_file()
sftp = paramiko.SFTPClient.from_transport(self.conn)
sftp.put(file_name, '/home/lbsweb/bak/beifen-lianlian.sh') def download(self):
sftp = paramiko.SFTPClient.from_transport(self.conn)
sftp.get('/home/lbsweb/bak/test.sh', '/home/ganzl/bak/test.sh') def my_cmd(self):
ssh = paramiko.SSHClient()
ssh._transport = self.conn #注意,这里是将封装的transport放到SSHClient中去,执行命令
stdin, stdout, stderr = ssh.exec_command('df')# 执行命令
result = stdout.read()
print result def run(self):
self.connect()
self.my_cmd()
#self.upload() 这里测试只执行命令。
self.close() pro = properties()
pro.run()
paramiko模块的更多相关文章
- paramiko模块的安装
1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...
- python远程连接paramiko 模块和堡垒机实现
paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- paramiko模块-2
如何用paramiko模块模拟登入服务器,并记录操作日志,起到审计的作用? 各个client ---(连接跳转机)--->(跳转机)------>各自的目标服务器. 目前我们公司的跳转机, ...
- Win7下Python2.7环境安装paramiko模块
Win7下Python2.7环境安装paramiko模块,经过安装并测试成功,整理文档如下: 1.下载安装Windows版本的Python2.7,我默认装在C:\Python27 我的python已经 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- paramiko模块,线程,进程
关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...
- Python paramiko 模块
paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...
随机推荐
- python 树遍历
使用python实现的树遍历,包括宽度优先和深度优先 ef dfs(): tree = { 'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F', 'G'], 'D' ...
- 关于 iOS 10 中 ATS 的问题
本文于 2016 年 11 月 28 日按照 Apple 最新的文档和 Xcode 8 中的表现进行了部分更新. WWDC 15 提出的 ATS (App Transport Security) 是 ...
- ERROR actor.OneForOneStrategy: org.apache.spark.SparkContext
今天在用Spark把Kafka的数据往ES写的时候,代码一直报错,错误信息如下: 15/10/20 17:28:56 ERROR actor.OneForOneStrategy: org.apache ...
- 【转】Oracle表分区
源地址:http://love-flying-snow.iteye.com/blog/573303
- java中final 、finally、finalize的区别
比较java中常用关键字以免混淆 final :用来修饰变量,表示变量为最终变量,不能被改变 finally:在处理异常的时候使用,表示最终要执行的代码块 finalize:java Object类中 ...
- 利用Continuous Testing实现Eclipse环境自动单元测试
当你Eclipse环境中修改项目中的某个方法时,你可能由于各种原因没有运行单元测试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...
- adcfgclone.pl appsTier报错Unable to locate 'linkxlC' utility in path
$ cd /u01/dev/apps/apps_st/comn/clone/bin$ perl adcfgclone.pl appsTier Copyrigh ...
- JVM & Server & Connector & Context Relationship
- Excel with COM
COM excelApplication ; COM workBooks ; COM workSheets ; COM workSheet ; COM work ...
- VBA中如何动态定义数组
利用 dim Arr()as string这样声明,一旦赋值后,数组大小也就固定了.如果要改变数组大小,要用redim 命令redim arr(10) 加preserve 可以不清空数组,保持原有数据 ...