使用pymysql和paramiko实现远程安装软件
通过pymysql模块调用数据库获取安装信息,通过paramiko模块远程传输脚本并执行来安装软件,本文以安装apache为例。
创建apache安装信息数据表install_apache,设定三个字段,一个ip地址,一个root用户密码,一个是否已安装状态码,如下:
use python; ),passwd ),status ));
插入数条数据信息(数据是造的,条件所限,只有192,168.100.100是真机,然并卵),设定192,168.100.100这台机器还没有安装apache
insert into install_apache values("192.168.100.100","pengyc","N");
insert into install_apache values("192.168.100.99","pengyc","Y");
insert into install_apache values("192.168.100.98","pengyc","Y");
脚本调用数据库,遍历整个表,当状态为”N”时,调用paramiko远程传输早已写就的install_apache.sh脚本并执行之,执行之后修改状态码为”Y”,代码如下:
#!/usr/bin/env python3
#coding:utf-8
import pymysql,paramiko
#连接数据库
conn = pymysql.connect(host='192.168.100.100',user='peng',passwd='pengyc')
cur = conn.cursor()
conn.select_db('python')
cur.execute('select * from install_apache')
results = cur.fetchall()
#遍历整张表
for r in results:
if r[2] == "N":
print("即将在%s上安装apache,请耐心等待..." % r[0] )
#传输脚本
t = paramiko.Transport((r[0],22))
t.connect(username='root',password=r[1])
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/root/code/install_apache.sh','/tmp/install_apache.sh')
t.close()
#远程执行脚本
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=r[0],username='root',password=r[1])
stdin,stdout,stderr = ssh.exec_command('sh /tmp/install_apache.sh')
print (stdout.read().decode('utf-8'))
ssh.close()
#更新状态码为“Y”
sql = "update install_apache set status ='%s' where ip = '%s'" % ("Y",r[0])
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
执行成功后更新状态码为“Y”,下次再运行的时候就不会再重复安装一遍了。
美中不足第一点:install_apache.sh安装脚本固定不变,无法传参,无法进行更多的客户化操作,不知是否有模块可以实现本地脚本或函数在远程安装,有待大牛解答,万分感谢!
美中不足第二点:每次遍历全表太low了
美中不足第三点:道行太浅,我也不知道
使用pymysql和paramiko实现远程安装软件的更多相关文章
- paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)
安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7 . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...
- Oracle 11g静默安装软件+手工创建数据库
由于是二次跳转+远程操作,无法使用图形界面,不能直接图形界面安装.采用静默安装软件+手工创建数据库的方式完成需求. 静默模式安装Oracle软件,配置监听程序 手工建库 检查各组件是否符合要求 1. ...
- 安卓使用adb命令安装软件
准备工作: 确信 \Android-sdk-windows\tools\下有 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 三个文件,如果没有从\and ...
- Linux下的网络远程安装
Linux下的网络远程安装 1.用RHEL6.5光盘安装第一台服务器 2.在第一台服务器上配置YUM服务器 先创建一个挂载 #mount #umount /dev/cdrom #mkdir /mnt/ ...
- Linux-TFTP之用于网络远程安装
TFTP:Trival File Transfer Protocol,简单文件传输协议.是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. ...
- 内网主机使用yum安装软件
经常遇到这样的情况:有一台内网linux主机需要安装软件,但是主机又无法连接外网,通常情况下可以使用rpm包或者使用源码编译安装.但常常会遇到依赖缺少的情况,这就麻烦了,要一一找到缺少的软件包. 这种 ...
- adb导出安卓 把手机内存文件导入到电脑里 adb安装软件
记得先找对路劲adb shellls 最上面的ls: ./ 打头的没有权限.而下面的这些acct sdcard等 都有权限. 然后cd sdcardls 看下目录,发现gxm文件夹在sdcard下面. ...
- python3使用paramiko操作远程机器
目标:有A和B两台机器,希望在机器A上操作B上的脚本 解决方法:使用paramiko实现操作远程机器 1.安装paramiko 安装第三方包[pip3 install paramiko] ...
- linux:使用apt、dpkg工具安装软件
先总结一下安装软件常用命令: % apt sudo apt install xxxx sudo apt list xxxx % dpkg安装deb文件 sudo dpkg -i xxxx.deb 学习 ...
随机推荐
- ckplayer 项目实际应用代码整理,支持标清,高清,超清切换!
ckplayer是个免费,小巧,功能强大的视频播放器,前段时间有个项目需要做个收费视频播放的功能,于是就用了ck,目前项目已经弄完,完美支持pc和手机端的播放,重要的是可以支持清晰度切换,最后加了个是 ...
- HDU 5727 - Necklace
题意:( 0 <= n <= 9 ) 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环, 已知有些阴珠子和阳珠子不能放在相邻的位置,否则这颗阳珠子就会失去功效, ...
- sqlserver2005仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'SendMealAddress'中为标识列指定显式值。
ps = con.prepareStatement("insert into SendMealAddress values(null,?,?,?,?)"); 表有一列是自增长的标识 ...
- JSON入门之二:org.json的基本用法
java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...
- asp.net实现伪静态遇到的问题
之前在一次项目(asp.net网站)中要用到伪静态技术,实现的思路大致是这样的: 在全局配置文件Global.asax(普通的类可以通过实现IHttpModule来完成)中的Application_B ...
- php number_format()保留小数点后几位有效数的函数 千位分组来格式化数字(转)
PHP保留小数点后2位的函数number_format number_format(带小数点的书,小数点后保留的位数) number_format(8.3486,2); //取得小数点后2位有效数/ ...
- C语言学习second--C语言基础学习
1.标准C语言 C语言诞生于20世纪70年代,年龄比我们自己还要大,期间产生了很多标准,但是各种编译器对标准的支持不尽相同. ANSI C是使用的最广泛的一个标准,也是第一个正式标准,被称为“标准C语 ...
- Nginx 配置指令的执行顺序(四)
ngx_lua 模块提供了配置指令 access_by_lua,用于在 access 请求处理阶段插入用户 Lua 代码.这条指令运行于 access 阶段的末尾,因此总是在 allow 和 deny ...
- android textView 富文本显示
String parenName = entity.getParent().getMember_nickname(); parantNameRich = "<font color='# ...
- table的样式定义
table的cellpadding和cellpadding我们经常会用如下的方式来清除默认样式: <table cellspacing="0" cellpadding=&qu ...