以下程序均来自《Python.UNIX和Linux系统管理指南》

首先要设置ssh无密码登陆

操作步骤:

1. 生成ssh密钥

[root@os1 ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

65:55:08:91:6b:7e:06:e6:17:e6:c3:6b:c6:db:94:3c root@os1

2. 将公共密钥拷贝到被远程的机器上

[root@os1 ~]# cd /root/.ssh/

[root@os1 .ssh]# scp id_rsa.pub root@10.33.0.223:/root/.ssh

3. 在被远程的机器上执行

[root@os2 .ssh]# cat id_rsa.pub > authorized_keys

4. 测试ssh登陆

[root@os1 .ssh]# ssh root@10.33.0.223

Last login: Tue Jul  9 11:26:29 2013 from 10.33.1.28

[root@os2 ~]# exit

logout

Connection to 10.33.0.223 closed.

一个简单的基于ssh的分发器

dispatch.py

#!/usr/bin/env python

import subprocess

machines = ["192.168.137.2", "192.168.137.3"]

cmd = "uname -a"

for machine in machines:

subprocess.call("ssh root@%s %s" % (machine, cmd), shell=True)

运行结果:

[root@centos python]# python dispatch.py

Linux centos 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

Linux centos-zh 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

一个高级的基于ssh的分发器,将要远程连接的机器IP和要执行的命令写在配置文件config.ini里,然后读取配置文件来执行

config.ini

[MACHINES]

CENTOS: 192.168.137.2

CENTOS2: 192.168.137.3

[COMMANDS]

uname: uname -a

advanced_dispatch.py

#!/usr/bin/env python

import subprocess

import ConfigParser

def readConfig(file="config.ini"):

ips = []

cmds = []

Config = ConfigParser.ConfigParser()

Config.read(file)

machines = Config.items("MACHINES")

commands = Config.items("COMMANDS")

for ip in machines:

ips.append(ip[1])

for cmd in commands:

cmds.append(cmd[1])

return ips, cmds

ips, cmds = readConfig()

for ip in ips:

for cmd in cmds:

subprocess.call("ssh root@%s %s" %(ip, cmd), shell=True)

运行结果:

[root@centos python]# python advanced_dispatch.py

Linux centos 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

Linux centos-zh 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

基于ssh的多线程分发器

配置文件同上config.inithreaded_dispatch.py

#!/usr/bin/env python

import subprocess

import ConfigParser

from threading import Thread

from Queue import Queue

import time

"""

A threaded ssh-based command dispatch system

"""

start = time.time()

queue = Queue()

def readConfig(file="config.ini"):

ips = []

cmds = []

Config = ConfigParser.ConfigParser()

Config.read(file)

machines = Config.items("MACHINES")

commands = Config.items("COMMANDS")

for ip in machines:

ips.append(ip[1])

for cmd in commands:

cmds.append(cmd[1])

return ips, cmds

def launcher(i, q, cmd):

while True:

ip = q.get()

print "Thread %s: Running %s to %s" % (i, cmd, ip)

subprocess.call("ssh root@%s %s" % (ip, cmd), shell=True)

q.task_done()

ips, cmds = readConfig()

if len(ips) < 25:

num_threads = len(ips)

else:

num_threads = 25

for i in range(num_threads):

for cmd in cmds:

worker = Thread(target=launcher, args=(i, queue, cmd))

worker.setDaemon(True)

worker.start()

print "Main Thread waiting"

print ips

for ip in ips:

queue.put(ip)

queue.join()

end = time.time()print "Dispatch Completed in %s seconds" % str(end - start)

运行结果:

[root@centos python]# python threaded_dispatch.py

Main Thread waiting

['192.168.137.2', '192.168.137.3']

Thread 0: Running uname -a to 192.168.137.2

Thread 1: Running uname -a to 192.168.137.3

Linux centos 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

Linux centos-zh 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

Dispatch Completed in 10.2910089493 seconds

注意:最后一个多线程,只能执行一条命令,执行多个命令时会有问题

python 成员函数 分发器_python实现基于ssh的分发器相关推荐

  1. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  2. python子函数怎么写_python函数写法

    len(x) 击败 x.len(),从内置函数看 Python 的设计思想 内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得. ...

  3. python class函数报错_Python 的函数是第一类 First-Class 对象

    Python的函数是第一类对象(first-class object).你可以把一个函数复制给变量,或者把函数存储在一个结构中.可以像参数一样把函数传递进另一个函数,还可以从一个函数中返回另一个函数. ...

  4. 如何使用python装饰器_Python学习之如何使用装饰器 @decorator

    建议大家在看这篇文章之前还是点击上面这篇文章看一下,先了解一下什么是装饰器之后再看. 猿人学python之我的学习笔记分享:如何使用装饰器 @decorator 上面代码中使用装饰器的方法看起来有点复 ...

  5. python自定义函数详解_python基础教程之自定义函数介绍

    函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以 ...

  6. if python 判断函数返回值_Python函数的返回值和作用域

    函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: return "<= 3&quo ...

  7. 谈谈python enumerate()函数的用法_python enumerate函数的使用方法总结

    enumerate函数用于遍历序列中的元素以及它们的下标. enumerate函数说明: enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 函数原型:enu ...

  8. python自定义函数的关键字_python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  9. python分段函数编写程序_python分段函数如何编写?

    python分段函数如何编写? python编写分段函数的方法: 1.绘制分段函数:y=4sin(4πt)-sgn(t-0.3)-sgn(0.72-t) 代码: #!/usr/bin/python# ...

最新文章

  1. python如何使用sdk_七牛云存储Python SDK使用教程 - 基本介绍
  2. lisp 绘制立体感的五角星_[原创]圆内加五角星lsp代码,详细有注解
  3. 《 第一行代码 》读后感
  4. C#开发笔记之13-如何用C#分隔字符串并返回字符串数组?
  5. 开始用Tornado:从Hello World开始
  6. html 列表点,HTML + CSS:不带句点的有序列表?
  7. 自定义Button形状(圆形、椭圆)
  8. 大数据之-Hadoop3.x_MapReduce_ReduceJoin案例Reducer_案例_Debug调试---大数据之hadoop3.x工作笔记0132
  9. ylbtech-LanguageSamples-Struct(结构)
  10. 依赖编程内部知识的C语言习惯用法
  11. HDU-1009 做个骑士,以梦为马
  12. 在WINDOWS XP环境下部署基于网络的开源入侵监测平台——snort
  13. Themida/WinLicense V1.8.2.0 +脱壳 FOR PcShare远程控制会员版本20070826
  14. IDEA插件记录与使用
  15. Bumped!(dijskra)
  16. RST报文以及产生场景
  17. java老师实例_java实例关于继承求实例,有关学生和老师的程序代码!望诸位软件达人帮忙,谢谢大虾!...
  18. 网络安全从业者超全书单推荐
  19. hibernate一对一主键唯一外键关联(二)
  20. 怎么设置服务器文件夹多权限管理,如何设置共享文件夹,小编告诉你如何设置共享文件夹权限...

热门文章

  1. 寒武纪论文DianNao、DaDianNao、ShiDianNao赠送
  2. 为Linux编译atheros ar1111(设备ID:168c:0037,AW-NB100H – AR5B225 Atheros half size)网卡驱动...
  3. 里怎么带引号_日本小学里的午餐,都是怎么搭配的呢,带您了解一下
  4. html p自动换行超出省略,html内容超出了div或p的宽度 让内容自动换行
  5. 一、坦克大战单机版策划
  6. 深度学习基础23(数据偏移what,how,why)
  7. python 保存视频流_python3将视频流保存为本地视频文件
  8. 效率办公 | python零基础知识点汇总(下)
  9. 2021-4-27 工作记录--input和textarea出现边框部分失踪+让多个文本输入框左侧对齐+电话号码的正则表达式+图片和文字没有对齐+jQuery滚动视觉差插件+清除浮动
  10. 语音识别的降噪思路和总结