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 ...
随机推荐
- struts2 数据校验
通过struts2中延续自xwork框架的validation.xml配置方式进行数据校验,因struts2 下存在三种请求参数的注入方式,固按照不同注入方式对validation.xml的配置进行总 ...
- 关于MVC中Start.cs文件的作用
当我们建立默认的 .NET Framework4.5.2框架下的Web MVC 应用程序后,调试过程中我发现在程序启动页面加载完成会执行一段代码,这段代码让人有点摸不着头脑,因为之前完全没见过,调试 ...
- Hadoop集群搭建安装过程(二)(图文详解---尽情点击!!!)
Hadoop集群搭建安装过程(二)(配置SSH免密登录)(图文详解---尽情点击!!!) 一.配置ssh无密码访问 ®生成公钥密钥对 1.在每个节点上分别执行: ssh-keygen -t rsa(一 ...
- 带日期的bean转为json(bean->JSON)
示例代码: JsonBean bean = new JsonBean();bean.setName("NewBaby");bean.setAge(1);bean.setBorn(n ...
- ios常见的页面传值方式
iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值 ...
- PHP代码实用片段
一.黑名单过滤 function is_spam($text, $file, $split = ':', $regex = false){ $handle = fopen($file, 'rb'); ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)之间区别
http://m.blog.csdn.net/article/details?id=52795914#0-qzone-1-52202-d020d2d2a4e8d1a374a433f596ad1440
- Python 2x -> 3.x
Nowadays, Python 3 is becoming more and more popular than Python 2, but there are still a lot of cod ...
- Static List
Static ListStatic List is the smart implementation of list data structure for those languages that h ...
- 使用js创建对象
1.js创建关键字 //使用 New 关键字 function person(name,age){ this.name=name; this.age=age; } $(function(){ var ...