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 ...
随机推荐
- Repeater 根据某一列的值加颜色
//排队中 protected void rptOrdersList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterIt ...
- TYVJ 1117 BFS
无限WA..参考了一下题解和同学写的....... 可以在bfs的基础上改一下.. 读入的时候平地权值是2 草地是0 bfs的时候如果搜到的是平地,那么直接加入,如果搜到的是草地,那么记录是草地. 从 ...
- 浅谈P NP NPC
P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...
- ie浏览器 jsp中链接参数为中文的处理
在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...
- oracle rman恢复数据库 方式恢复到异地数据库
目的:从某个环境中,获取相关文件,放到异地机器使用rman 恢复. 情况说明:XX系统使用的是oracle数据库,现已从服务器拉下来相关文件,依靠这些文件来早本地的测试机上恢复数据库,方便进行数据 ...
- kickstart+ftp+tftp+dhcp+PXE
##########yum less install.log #看安装log yum install system-config-kickstart* -y yum install tftp* -y ...
- EXT.net DateField format设置
DateField df = new DateField(); df.Format = "yyyy-MM-dd HH:mm:ss";格 ...
- photoshop,黑白转彩色单色
方法一: 打开 色相/饱和度 面板,勾选上 着色, 然后调节 明度 滑块. 方法二: 前面方法的缺点是会将修改直接塌陷到图层,如果想不塌陷,可以使用色相蒙板: 同样勾选 着色
- 《HelloGitHub》之GitHub Bot
起因 我在github上发起了一个开源项目:<HelloGitHub月刊>,内容是github上收集的好玩,容易上手的开源项目. 目的:因为兴趣是最好的老师,我希望月刊中的内容可以激发读者 ...
- 使用jQuery Autocomplete(自动完成)插件
jQuery 的Autocomplete(自动完成.自动填充)插件有不少,但比较下来我感觉,还是bassistance.de 的比较强大,我们就来写一些代码感受一下. 最简单的Autocomplete ...