一、基于用户名密码认证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的更多相关文章

  1. paramiko模块,线程,进程

    关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...

  2. Day9 - Python 多线程、进程

    Python之路,Day9, 进程.线程.协程篇   本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...

  3. python学习day9

    目录 一.队列 二.生产者消费者模型 三.协程 四.select\poll\epoll 五.paramiko 六.mysql API调用 一.队列(queue) 队列分以下三种: class queu ...

  4. paramiko 的使用

    paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于远程连接机器执行基本命令,也可以执行shell脚本 基于用户名密码连接: def ssh_connect ...

  5. python+paramiko库+svn写的自动化部署脚本

    第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...

  6. 离线安装 Python 2.7, paramiko 和 tornado

    无非就是离线安装, 步骤比较繁琐, 记录一下. 需求很简单, 一个离线安装的 Python, 能跑 tornado 和 paramiko 1. 离线安装 Python 2.7 .tgz cd Pyth ...

  7. CentOS 安装Paramiko模块

    转自:http://www.cnblogs.com/hyli/p/3910585.html 1.下载安装包: https://pypi.python.org/packages/source/p/par ...

  8. paramiko模块的安装

    1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...

  9. 使用paramiko如何连接服务器?

    本文和大家分享的是python开发中使用paramiko连接服务器的方法和步骤,希望通过本文的,对大家学习和使用paramiko有所帮助. ssh连接步骤 1.ssh server建立server p ...

  10. python paramiko 进行文件上传处理

    #!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuid class Ha(object): def __ini ...

随机推荐

  1. 矩阵分解ALS方法

    目标函数 优化目标函数 利用坐标下降法,依次更新u和v的值.u和v的先后顺序无所谓,只要保证两者是交替更新的就好.这种方法又称为alternating least squares(ALS). 增加偏置 ...

  2. win7系统.LNK类型文件打开方式的修复办法

    1.首先 win+r 2.打开运行程序 3.输入: regedit 4.找到: 计算机\HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\currentvers ...

  3. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  4. Linux下搭建FTP服务器

    实习的公司有一台老服务器转作为FTP服务器,老大把这个任务交给了我.这两天边学边卖的捣腾起来,总算搞成.现在记录下来,加深映像,也以便以后查看复习. 服务器安装的是:Red Hat Enterpris ...

  5. jd-gui报错INTERNAL ERROR 解决办法

    问题:我用dex2jar工具反编译了apk文件,但当我用jd-gui反编译前面操作获得的jar文件的时,能很完美地看到大部分类反编译后的代码,但有一部分类不能显示出来--constants类,仅仅显示 ...

  6. mybatis——延迟加载

    ------------------------------------------------SqlMapConfig.xml------------------------------------ ...

  7. 基于日志数据分析以防御CC攻击的想法

    1. What - 什么是CC攻击 CC攻击,即针对应用层HTTP协议的DDos攻击,攻击者在短时间内向目标服务器发送大量的HTTP请求,使得服务器会非常繁忙,资源消耗会增加:同时,如果请求中包含基于 ...

  8. [IOS8兼容性]IOS8上收不到通知

    应用中用到了通知功能,同时有远程通知和本地通知. 测试报告应用在iphone6 plus上,收不到本地通知. 因为所有的第三方闹钟应用采用的都是本地通知方式,所以第一时间随机下载了5款不同的闹钟应用. ...

  9. linux一些常用配置

    1.vi编辑退出不清屏 .bashrc最后加: 2.

  10. clientX、pageX、scrollLeft、offsetLeft、clientWidth、screen.width的用法和区别

    一.定义和用法 1.event.clientX:事件对象的水平偏移量: event.clientY:事件对象的垂直偏移量: 2.event.pageX:事件对象加上滚动距离后的水平偏移量: event ...