主模块

#!/usr/bin/env python
from multiprocessing import Process
import paramiko
import time
import sys
import new_latest_configparser #导入配置信息模块
# import groupshow
Username = "root"
Password = "123456"
Port = 22
Current_time = time.strftime("%Y-%m-%d %X", time.localtime())
#执行命令处
def runCmd(ip,cmd):
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
s.connect(hostname=ip,port=Port,username=Username,password=Password)
stdin,stdout,stderr = s.exec_command(cmd)
result = stdout.read()
# print(result)
s.close()
print("IP:[%s]at:[%s] run command [%s]".center(50, "-") % (ip, Current_time,cmd))
print(str(result, encoding="utf-8")) except:
print("%s is not exits" %ip)
# if_continue = input("请输入是否需要继续输入命令,是按[Y],否按[N]")
def handle_Process():
while True:
print("欢迎来到ansible模拟系统,主机分组如下".center(50, "-"))
#调用主机信息模块方法
new_latest_configparser.showgroups()
User_choice = str(input("请选择组:").strip())
if len(User_choice) == 0 or User_choice not in new_latest_configparser.GROUP or User_choice.isdigit():
print("请输入正确的组名")
continue
elif User_choice == "webserver":
#打印主机信息处
print(new_latest_configparser.config.get("webserver", "IP"))
print(new_latest_configparser.config.get("webserver", "IP2"))
break elif User_choice == "dbserver":
# print(functions.config.get("dbserver"))
print(new_latest_configparser.config.get("dbserver","IP"))
break
try: cmd = input("please input your cmd:")
#判断主机组
if User_choice == "webserver":
#循环获取IP
for ip in new_latest_configparser.IPlist:
p = Process(target=runCmd,args=(ip,cmd))
p.start() elif User_choice == "dbserver":
for ip in new_latest_configparser.Other_list:
p = Process(target=runCmd, args=(ip, cmd))
p.start()
except IndexError:
print("please input a command")
if __name__ == '__main__':
handle_Process()

配置信息模块

import configparser
config = configparser.ConfigParser()
config.read("host.conf")
sec = config.sections()
kvs = config.items("webserver")
GROUP = [
"webserver",
"dbserver" ]
IP = str(kvs[0][1])
IP2 = str(kvs[1][1])
IPlist = []
IPlist.append(IP)
IPlist.append(IP2) #另外一组信息
Other_kvs = config.items("dbserver")
New_IP = str(Other_kvs[0][1])
Other_list = []
Other_list.append(New_IP)
def showgroups():
for group in sec:
print(group)

配置信息

[webserver]
IP = 192.168.170.143
IP2 = 192.168.170.150
[dbserver]
IP = 192.168.170.129

运行结果

paramiko模拟ansible远程执行命令的更多相关文章

  1. 网络编程 - 1.简单的套接字通信/2.加上通信循环/3.bug修复/4.加上链接循环/5.模拟ssh远程执行命令

    1.简单的套接字通信 服务端 ''' 服务端 接电话 客户端 打电话 1.先启动服务端 2.服务端有两种套接字 1.phone 用来干接收链接的 2.conn 用来干收发消息的 ''' import ...

  2. 模拟ssh远程执行命令,粘包问题,基于socketserver实现并发的socket

    06.27自我总结 1.模拟ssh远程执行命令 利用套接字编来进行远程执行命令 服务端 from socket import * import subprocess server = socket(A ...

  3. 网络编程之模拟ssh远程执行命令、粘包问题 、解决粘包问题

    目录 模拟ssh远程执行命令 服务端 客户端 粘包问题 什么是粘包 TCP发送数据的四种情况 粘包的两种情况 解决粘包问题 struct模块 解决粘包问题 服务端 客户端 模拟ssh远程执行命令 服务 ...

  4. Ansible 远程执行命令

    写法如下: [root@localhost ~]$ ansible 192.168.119.134 -m command -a 'date' # 对指定的主机远程执行命令,-m 指定使用哪个模块,-a ...

  5. 模拟ssh远程执行命令

    目录 一.服务端 二.客户端 一.服务端 from socket import * import subprocess server = socket(AF_INET, SOCK_STREAM) se ...

  6. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  7. 使用paramiko远程执行命令、下发文件

    写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...

  8. 远程执行命令:paramiko

    paramiko模块用于通过 ssh 登录到远程客户端主机并执行命令,常见用法如下: [root@localhost ~]$ yum install -y python-paramiko 通过用户名密 ...

  9. 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件

    本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...

随机推荐

  1. [Elasticsearch] 全文搜索 (一) 基础概念和match查询

    全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...

  2. python之旅2

    python基础 1整数 查看整数类型的方法 >>> a = 1 >>> dir(a) ['__abs__', '__add__', '__and__', '__c ...

  3. servlet注解@PostConstruct与@PreDestroy

    从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的vo ...

  4. 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    CustomResource ResourceDictionary 加载外部的 ResourceDictionary 文件 示例1.演示“CustomResource”相关知识点Resource/Cu ...

  5. 算法与数据结构之交换(SWAP)排序

    #include<stdio.h> #include<stdlib.h> void swap(int x,int y); void swap_p(int *px,int *py ...

  6. 【BZOJ-1121】激光发射器SZK 物理 + 数学 + 乱搞

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 682  Solved: 565[Submit][Sta ...

  7. [NOIP2014] 提高组 洛谷P1351 联合权值

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  8. PHP Datatype Conversion Safety Risk、Floating Point Precision、Operator Security Risk、Safety Coding Principle

    catalog . 引言 . PHP operator introduction . 算术运算符 . 赋值运算符 . 位运算符 . 执行运算符 . 递增/递减运算符 . 数组运算符 . 类型运算符 . ...

  9. 11个强大的Visual Studio调试小技巧

    简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...

  10. primefaces 上传文件尺寸受限制 Connection terminated as request was larger than

    standalone.xml like this: <http-listener name="default" socket-binding="http" ...