#!/usr/bin/python  
#-*- coding: utf-8 -*-  
import paramiko  
import datetime  
import os,tab,sys
from multiprocessing import Process, Pool
host_list = (
	('192.168.1.127','root','123456'),
	('192.168.1.137','root','123456'),
	('192.168.1.143','root','123456'),
)
def ssh_run(host_info,cmd):  
	try:  
		ip,username,password = host_info
		ssh = paramiko.SSHClient()  
		ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
		ssh.connect(ip,22,username,password,timeout=5)
		stdin,stdout,stderr = ssh.exec_command(cmd)
		cmd_result = stdout.read(),stderr.read()
		print '\033[32;1m正在执行命令:%s------主机名-------%s-----------\033[0m' %(cmd, ip),username
		for line in cmd_result:
			print line,
		ssh.close()
	except : 
		print "\033[31;1m连接失败----------%s-----------\033[0m"%ip 
def get(host_info,local_dir,remote_dir):  
	try:  
		ip,username,password = host_info
		t = paramiko.Transport((ip,22))  
		t.connect(username=username,password=password)  
		sftp = paramiko.SFTPClient.from_transport(t)  
		files = sftp.listdir(remote_dir)  
		for f in files:
			print 
			print "-"*30
			print '\033[31;1m正在下载文件 %s:  %s: \033[0m' % (ip, datetime.datetime.now())  
			print '\033[31;1m文件名:\033[0m',f  
			sftp.get(os.path.join(remote_dir, f), os.path.join(local_dir, f))
			print '\033[32;1m下载成功 %s:\033[0m ' % datetime.datetime.now()
			print 
			print "-"*30
		t.close()  
	except:  
		print "\033[31;1m连接失败----------%s-----------\033[0m"%ip 
  
def put(host_info,local_dir, remote_dir):  
	try:
		ip,username,password = host_info
		t = paramiko.Transport((ip, 22))  
		t.connect(username=username, password=password)  
		sftp = paramiko.SFTPClient.from_transport(t)
		files = os.listdir(local_dir) 
		for f in files:
			print
			print "-"*30
			print '\033[31;1m正在上传文件到:\033[0m %s  %s ' % (ip, datetime.datetime.now())  
			print '\033[31;1m文件名:\033[0m', f
			sftp.put(os.path.join(local_dir, f), os.path.join(remote_dir, f))
			print '\033[32;1m文件上传成功\033[0m %s ' % datetime.datetime.now()  
			print 
			print '-'*30
			t.close()  
	except:  
		print "\033[31;1m连接失败----------%s-----------\033[0m"%ip 
  
  
#执行命令函数
def send_cmd():
	cmd = raw_input("CMD:")
	p = Pool(processes=2)
	result_list = []
	for h in host_list:
		result_list.append(p.apply_async(ssh_run,[h,cmd]) ) 
	for res in result_list:
		res.get()
#执行发送文件函数
def send_file():
	local_dir = raw_input('本地目录:')
	remote_dir =raw_input('远程目录:')
	p = Pool(processes=2)
	result_list = []
	for h in host_list:
		result_list.append(p.apply_async(put,[h,local_dir,remote_dir]))
	for res in result_list:
		res.get()

def get_file():
	local_dir = raw_input('本地目录')
	remote_dir =raw_input('远程目录')
	p = Pool(processes=2)
	result_list = []
	for h in host_list:
		result_list.append(p.apply_async(get,[h,local_dir,remote_dir]))
	for res in result_list:
		res.get()


msg = """\033[31;1m
1.执行命令
2.发送文件
3.下载文件
0.退出
\033[0m
"""


while True:
	try:
		print msg
		Choose = raw_input('\033[34;1m选择操作:\033[0m')
		if int(len(Choose))==0:continue
		if int(Choose) == 1:send_cmd()
		if int(Choose) == 2:send_file()
		if int(Choose) == 3:get_file()
		if int(Choose) == 0:
			print "By......"
			sys.exit()
	except KeyboardInterrupt:
		continue

执行效果如下

python批量执行命令发送文件_password