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 ...
随机推荐
- Android之QQ登录界面
首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得 ...
- LintCode Two Sum
1. 数组numbers == null 及numbers.length == 0, 而不是用numbers[] 2. HashMap<Integer, Integer>而不是<in ...
- Android Studio使用教程-菜单(Edit)
3.2.1.Undo(Ctrl+Z) 撤销上一次操作 3.2.2.Redo(Ctrl+Shift+Z) 退出撤销操作 3.2.3.Cut(Ctrl+X) 剪切 3.2.4.Copy(Ctrl+C) 复 ...
- angular2 笔记
动态添加一个component: import { ViewContarinerRef, Component, ComponentFactoryResolver, ViewChild } from ' ...
- Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发
由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...
- 第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
文本与程序的几种打开方法 文本文件的打开方法 函数名: cmd 命令 函数描述: 执行CMD命令 函数原型: cmd(cmdstr) 命令(cmd命令) 函数参数: cmdstr:cmd命令,此处执行 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
- const指针
const指针这个问题,复习了好多次,每次看书的时候明白,但是过了一段时间之后没用,总会再次被搞糊涂. 那么今天就把这个问题先用代码实现,把自己理解的写下来.代码在下面: ; ; const int* ...
- Switch能否用string做参数?
由于小编自己的编译环境jdk用的是比较高,在命令窗口输入java -version即可看到.(打开命令窗口win+R,输入cmd,回车) java version "1.8.0_111&qu ...
- 汇编语言基础 debug的使用
-r 查看,改变CPU寄存器的内容 -r 加上寄存器名 在:后输入要写入的数据后 完成更改 debug 随着CS IP的改变 对应的汇编指令也不同 -r ip -r cs修改 ip cs 的值 d 段 ...