通过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实现远程安装软件的更多相关文章

  1. paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)

    安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7  . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...

  2. Oracle 11g静默安装软件+手工创建数据库

    由于是二次跳转+远程操作,无法使用图形界面,不能直接图形界面安装.采用静默安装软件+手工创建数据库的方式完成需求. 静默模式安装Oracle软件,配置监听程序 手工建库 检查各组件是否符合要求 1. ...

  3. 安卓使用adb命令安装软件

    准备工作: 确信 \Android-sdk-windows\tools\下有 adb.exe     AdbWinApi.dll     AdbWinUsbApi.dll 三个文件,如果没有从\and ...

  4. Linux下的网络远程安装

    Linux下的网络远程安装 1.用RHEL6.5光盘安装第一台服务器 2.在第一台服务器上配置YUM服务器 先创建一个挂载 #mount #umount /dev/cdrom #mkdir /mnt/ ...

  5. Linux-TFTP之用于网络远程安装

    TFTP:Trival File Transfer Protocol,简单文件传输协议.是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的文件传输服务. ...

  6. 内网主机使用yum安装软件

    经常遇到这样的情况:有一台内网linux主机需要安装软件,但是主机又无法连接外网,通常情况下可以使用rpm包或者使用源码编译安装.但常常会遇到依赖缺少的情况,这就麻烦了,要一一找到缺少的软件包. 这种 ...

  7. adb导出安卓 把手机内存文件导入到电脑里 adb安装软件

    记得先找对路劲adb shellls 最上面的ls: ./ 打头的没有权限.而下面的这些acct sdcard等 都有权限. 然后cd sdcardls 看下目录,发现gxm文件夹在sdcard下面. ...

  8. python3使用paramiko操作远程机器

    目标:有A和B两台机器,希望在机器A上操作B上的脚本   解决方法:使用paramiko实现操作远程机器   1.安装paramiko   安装第三方包[pip3 install paramiko] ...

  9. linux:使用apt、dpkg工具安装软件

    先总结一下安装软件常用命令: % apt sudo apt install xxxx sudo apt list xxxx % dpkg安装deb文件 sudo dpkg -i xxxx.deb 学习 ...

随机推荐

  1. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

  2. SQL Server 中索引的禁用与删除

    主题 1. 禁用索引 alter index index_name on table_name disable; 主题 2. 删除索引 drop index table_name.index_name ...

  3. git 的一些使用和命令

    http://git.oschina.net/progit/2-Git-%E5%9F%BA%E7%A1%80.html(pro git)   git branch  (展示本地当前的所有分支,以及当前 ...

  4. instsrv.exe下载和使用方法(微软Windows Server 2003 Resource Kit Tools工具中的一个)

    instsrv.exe是微软Windows Server 2003 Resource Kit Tools工具中的一个. Windows Server 2003 Resource Kit Tools是一 ...

  5. 【the service mysql57 failed the most】

    异常信息: the the service mysql57 failed the most recent status change request with the messagethe servi ...

  6. how to remove MouseListener / ActionListener on a JTextField

    I have the following code adding an ActionListener to a JTextField: chatInput.addMouseListener(new j ...

  7. 为什么不能在scrollview中直接添加一个image,然后使animation.begin()??

    http://stackoverflow.com/questions/17267451/animation-cant-begin-in-scrollview-in-windows-phone 以上是我 ...

  8. MongoDB 分片操作

    添加分片 use admin //添加分片节点,每个分片都是一个副本集[allowLocal:true仅仅开发时才将分片配置到本地,生产时不能这样] db.runCommand({addshard:& ...

  9. Opencv关于滑动条bar操作的实例

    代码如下: //////////////////////////////////////////////////////////////////////// // // 该程序产生一个窗口10s 如果 ...

  10. Seek the Name, Seek the Fame(Kmp)

    Seek the Name, Seek the Fame Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (J ...