day9-paramiko
一、基于用户名密码认证SSH连接
#!/usr/bin/env python
#coding:utf8 import paramiko ssh = paramiko.SSHClient()#创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#允许连接不在know_hosts文件中的主机
ssh.connect(hostname='172.16.230.95',username='root',password='')#SSH连接远程服务器
stdin,stdout,stderr=ssh.exec_command('df -h')#执行的命令
result=stdout.read()
print result #打印执行结果
ssh.close()#关闭SSH连接
二、公钥秘钥SSH连接
#!/usr/bin/env python
#coding:utf8
import paramiko
private_key=paramiko.RSAKey.from_private_key('/root/.ssh/id_rsa')
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='172.16.230.95',username='root',pkey=private_key)#SSH连接远程服务器
stdin,stdout,stderr=ssh.exec_command('df -h')#执行的命令
result=stdout.read()
print result #打印执行结果
ssh.close()#关闭SSH连接
三、文件上传和下载
#!/usr/bin/env python
#coding:utf8 import paramiko '''
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
transport = paramiko.Transport(('172.16.230.95',22))
transport.connect(username='root',pkey=private_key)
公钥秘钥认证
''' transport = paramiko.Transport(('172.16.230.95',22)) #用户名密码认证
transport.connect(username='root',password='') sftp = paramiko.SFTPClient.from_transport(transport)
# 123.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/123.py', '/tmp/test.py')
# 将remote_path 下载到本地 local_path
sftp.get('remote_path', 'local_path') transport.close()
四、一个完整的例子
#!/usr/bin/env python
#coding:utf8 import paramiko
import threading
import time
import sys class Server_Run(threading.Thread):
def __init__(self,argv,ip):
threading.Thread.__init__(self)
self.username=argv['username']
self.password=argv['password']
if argv.get('local_file') and argv.get('remote_file'):
self.local_file=argv['local_file']#本地文件
self.remote_file=argv['remote_file']#远程文件
self.motion=argv['motion']#执行的动作 put还是get
else:
self.motion=''
if argv.get('cmd'):
self.cmd=argv['cmd']#命令
else:
self.cmd=''
self.group=argv['group']#服务组
self.server_ip=ip#服务器IP def conns(self):
self.transport = paramiko.Transport((self.server_ip,22))
self.transport.connect(username=self.username,password=self.password)
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh._transport = self.transport #使用反射解析字符串并调用方法
def argv_parse(self):
if hasattr(self,self.motion):
func=getattr(self,self.motion)
func() #执行远端命令
def ssh_cmd(self):
stdin, stdout, stderr = self.ssh.exec_command(self.cmd)
data=stdout.read()
if data:
print "\033[32;1m%s execution [%s] command to succeed\033[0m"%(self.server_ip,self.cmd)
print "[%s]----result----:\n%s"%(self.server_ip,data)
if stderr:
print ("\033[31;1m %s\033[0m"%stderr.read()) #文件上传
def put(self):
sftp = paramiko.SFTPClient.from_transport(self.transport)
sftp.put(self.local_file, self.remote_file) #文件下载
def get(self):
sftp = paramiko.SFTPClient.from_transport(self.transport)
sftp.get(self.remote_file, self.local_file) #重写run方法
def run(self):
paramiko.util.log_to_file('paramiko.log')
try:
self.conns()
except paramiko.SSHException,AttributeError :
print '[%s] connection timeout'%self.server_ip
sys.exit()
if self.cmd:
self.ssh_cmd()
self.argv_parse()
self.conn_close() #关闭连接
def conn_close(self):
self.transport.close() if __name__=='__main__':
server_ip=['172.16.230.95']
response={
'username':'root','password':'password',
'local_file':'/Users/xym/install.log',
'remote_file':'/root/install.log',
'cmd':'df -h',
'group':'web',
'motion':'get',
} for ip in server_ip:#循环IP
server=Server_Run(response,ip)#实例化类把argv和IP传入
server.start()#根据IP个数开启并执行多线程
day9-paramiko的更多相关文章
- paramiko模块,线程,进程
关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...
- Day9 - Python 多线程、进程
Python之路,Day9, 进程.线程.协程篇 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...
- python学习day9
目录 一.队列 二.生产者消费者模型 三.协程 四.select\poll\epoll 五.paramiko 六.mysql API调用 一.队列(queue) 队列分以下三种: class queu ...
- paramiko 的使用
paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于远程连接机器执行基本命令,也可以执行shell脚本 基于用户名密码连接: def ssh_connect ...
- python+paramiko库+svn写的自动化部署脚本
第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...
- 离线安装 Python 2.7, paramiko 和 tornado
无非就是离线安装, 步骤比较繁琐, 记录一下. 需求很简单, 一个离线安装的 Python, 能跑 tornado 和 paramiko 1. 离线安装 Python 2.7 .tgz cd Pyth ...
- CentOS 安装Paramiko模块
转自:http://www.cnblogs.com/hyli/p/3910585.html 1.下载安装包: https://pypi.python.org/packages/source/p/par ...
- paramiko模块的安装
1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...
- 使用paramiko如何连接服务器?
本文和大家分享的是python开发中使用paramiko连接服务器的方法和步骤,希望通过本文的,对大家学习和使用paramiko有所帮助. ssh连接步骤 1.ssh server建立server p ...
- python paramiko 进行文件上传处理
#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuid class Ha(object): def __ini ...
随机推荐
- jenkins 中 Poll SCM 和 Build periodically 的区别
Build periodically 定时触发构建任务,不管远程代码分支上的代码是否发生变化,都执行一次构建. 示例:H 2 * * * 每天两点定时执行构建. Poll SCM:定时感知代码分支是否 ...
- Dedecms自定义表单后台列表展现方式更改
Dedecms有自定义表单功能,方便我们收集用户信息.个人通常喜欢拿这个功能做问卷调查,在线留言等功能.但是如果使用过这个功能的朋友就会知道,Dedecms自定义表单后台列表展现方式并不好看. 上面就 ...
- Android深度探索HAL与驱动开发 第三章 Git入门
Git功能十分复杂,简单来说它使你的开发更为快捷和可控,尤其是在开源项目上展现的友好的交互和回馈. 熟悉一些git指令操作对开发者的帮助可以避免开发者受到一些外在因素打断开发进度,甚至延误项目的che ...
- centos x86_64环境下 下载chrome
由于Cent OS内核版本过低,无法安装Chrome浏览器2.替代方案:可以使用Chromium浏览器 1.切换到root: su - 或者 sudo -i 2.下载新的软件源定义: cd /etc/ ...
- ListView的item里面控件文本颜色修改
@SuppressLint("InflateParams") @Override public View getChildView(int groupPosition, int c ...
- Linux软raid创建
RAID: HBA:基于主机的适配器 RAID:Redundent Array of Inexpensive Disks 廉价磁盘阵列 Independent 独立磁盘阵列 Level:仅 ...
- 3数字cn域名延续数字域名火爆行情! 珍品域名 593.cn 出售
近日, 域名投资者小维放出珍藏多年的珍品域名593.cn, 据悉该域名将参加易名中国举办的数字域名专场拍卖活动,将以1元标价起拍. 域名593.cn,数字“593”谐音“我就上.吾就上.我就商 ...
- malloc原理和内存碎片[转]
当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1.检查要访问的虚拟地址是否合法 2.查找/分配一个物理页 3.填充物理页内容(读取磁盘,或者直接置0,或者啥也不干) 4.建立映射关系 ...
- js调用页面打印
----------------------调用页面打印-------------------------------- <body> <div id="divPrint& ...
- Python>>>Flask框架使用之入门
操作平台Windows Python2.7 安装 pip install flask Hello World程序 from flask import Flask app = Flask(__name_ ...