通过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. linux学习笔记之线程

    线程同步机制:http://www.cnblogs.com/zheng39562/p/4270019.html 一.基础知识 1:基础知识. 1,线程需要的信息有:线程ID,寄存器,栈,调度优先级和策 ...

  2. hdu 4612 Warm up(无向图Tarjan+树的直径)

    题意:有N个点,M条边(有重边)的无向图,这样图中会可能有桥,问加一条边后,使桥最少,求该桥树. 思路:这个标准想法很好想到,缩点后,求出图中的桥的个数,然后重建图必为树,求出树的最长直径,在该直径的 ...

  3. Android Assert工具类

    /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  4. [转]Linux netstat命令详解

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  5. WDLINUX (Centos5.8) 安装 bcmath

    环境 centos5.8 php5.2.17 因为wdos 集成的php5.2.17为精简版,并未包含php52-bcmath扩展. 所以先下载完整php5.2.17源码包 wget -c http: ...

  6. Prelude

    https://www.prelude-ids.org/wiki/prelude/PreludeLml

  7. [置顶] Oracle GoldenGate 系列:使用 Oracle ASM API DBLOGREADER 时遇 ora-01031 错误

    今天在自己新搭建的 Oracle ACFS 文件系统上测试 GoldenGate ,启动 extract 进程报如下错误: 2013-08-27 14:58:39  ERROR   OGG-00446 ...

  8. java设计模式--创建模式--建造者模式

    对于建造者模式,小编个人理解为就是一个组装型的模式. 建造者模式 概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用性 1.当创建复杂对象的算法应该独立于该对象的组 ...

  9. Aix5~6小机运维

    1,0516-787 extendlv: Maximum allocation for logical volume hd3        is 512 smitt chlv改max logical ...

  10. 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构

    switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...