最近工作需要,需要校验一些不同服务器上相同文件的一致性,因为服务器较多手动执行该操作会比较繁琐。研究了一段时间发现python的paramiko模块非常适合该项操作。简要编码如下,未上传从数据库服务器dao获取服务器列表等内容。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import paramiko
def ssh2(ip,username,password,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,password,timeout=5)
for m in cmd:
stdin,stdout,stderr = ssh.exec_command(m)
stdin.write("Y")
out = stdout.readlines()
# 以下两行注释用来执行所有命令和脚本的输出,本程序不用所以注视
#   for o in out:
#       print o
print '%s\t服务器登录执行命令成功\n' % (ip)
ssh.close()
except:
print '%s\t服务器登录异常,请检查\n' % (ip)
return out
if __name__ == '__main__':
#cmd = ['sh /home/bea1/for_md5.sh','cat file_md5_list.txt']
cmd = ['cat file_md5_list.txt'] #阅读文件内容,并获得相关md5码
username = 'bea1'
password = 'bea11234'
threads = []
print "Begin...."
ssh_list_95 = ssh2('10.10.141.95',username,password,cmd)
ssh_list_147 = ssh2('10.10.134.147','bea1','bea1',cmd)
if ssh_list_95[0] == ssh_list_147[0]:
print "The md5 =="
print "95  " + ssh_list_95[0]
print "147 " + ssh_list_147[0]
else:
print "error!"