admin 管理员组

文章数量: 1087131

实用自动化运维Python脚本

并行发送sh命令

pbsh.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import paramiko
import sys
import threading#Copy local file to remote server.
def sshclient_scp(hostname, port, username, password, local_path, remote_path):t = paramiko.Transport((hostname, port))t.connect(username=username, password=password)  # 登录远程服务器sftp = paramiko.SFTPClient.from_transport(t)  # sftp传输协议sftp.put(local_path, remote_path)t.close()def sshclient_scp_get(hostname, port, username, password, remote_path, local_path):t = paramiko.Transport((hostname, port))t.connect(username=username, password=password)  # 登录远程服务器sftp = paramiko.SFTPClient.from_transport(t)  # sftp传输协议sftp.get(remote_path, local_path)t.close()def sshclient_execmd(hostname, port, username, password, execmd):paramiko.util.log_to_file("paramiko.log")s = paramiko.SSHClient()s.set_missing_host_key_policy(paramiko.AutoAddPolicy())s.connect(hostname=hostname, port=port, username=username, password=password)stdin, stdout, stderr = s.exec_command(execmd)stdin.write("Y")  # Generally speaking, the first connection, need a simple interaction.line=stdout.read()s.close()print (hostname+":")print linetry:file_name = sys.argv[1]cmd= sys.argv[2]
except IndexError:print 'Wrong params!'print 'Usage :'print '       batch.py "$OS_LIST_FILE" "$BATCH_EXECUTE_CMD"'print 'cat oslist.txt:'print '192.168.0.1,22,oracle,passwd1'print '192.168.0.2,22,oracle,passwd1'print '192.168.0.3,24,oracle,passwd1'print 'Format is :'print 'IPADDR,SSHPORT,USERNAME,PASSWORD'print 'Examples of usage:'print './batch.py "/root/workspace/oslist.txt" "df -h"'sys.exit()#file_name = sys.argv[1]
#cmd= sys.argv[2]#maintenance_osinfo
with open(file_name) as file_object:for line in file_object:splits_str = line.rstrip().split(',')a=threading.Thread(target=sshclient_execmd,args=(splits_str[0],int(splits_str[1]),splits_str[2],splits_str[3],cmd))a.start()#print sshclient_execmd(splits_str[0],int(splits_str[1]),splits_str[2],splits_str[3],cmd)
#        print sshclient_scp(splits_str[0], int(splits_str[1]), splits_str[2], splits_str[3], file_name, splits_str[4]+file_name)



python发送邮件


sendmail.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import email.MIMEMultipart
import email.MIMEText
import email.MIMEBase
import sys
#from email.mime.application import MIMEApplication
#import os.pathdef sendmail(f_from, f_to, f_cclist, alert_info, f_subject):From = f_fromTo = f_to#file_name = f_file_nameserver = smtplib.SMTP("smtp.xxxx.com.cn")server.login("xxxx","xxxx")#构造MIMEMultipart对象做为根容器main_msg = email.MIMEMultipart.MIMEMultipart()text_msg = email.MIMEText.MIMEText("您好。<br><br><br><br>"+ alert_info.title() +"<br>任凤军 <br>""xx技术股份有限公司 <br>""手机: xx<br>""座机:xxx<br>""邮箱:xxxx@xx.com<br>""地址:xxxx<br>""邮编:130011<br>""===================================<br>""",'HTML','utf-8')main_msg.attach(text_msg)#xlsxpart = MIMEApplication(open(file_name, 'rb').read())#xlsxpart.add_header('Content-Disposition', 'attachment', filename=f_subject+".docx")#main_msg.attach(xlsxpart)# 设置根容器属性main_msg['From'] = Frommain_msg['To'] = Tomain_msg['Cc'] = ",".join(f_cclist)main_msg['Subject'] = f_subjectmain_msg['Date'] = email.Utils.formatdate()#f_cclist为完整的需要接收邮件的列表,原本只存放抄送列表,这里需要添加上收件人f_cclist.append(To)# 得到格式化后的完整文本fullText = main_msg.as_string()# 用smtp发送邮件try:server.sendmail(From, f_cclist, fullText)finally:server.quit()if __name__ == "__main__":#sys.setdefaultencoding('utf-8')message= ['Usage:','      sendmail.py "topic" "mail body text" "mail to"','Examples of usage:','                  sendmail.py "topic" "hello world" "14638852@qq.com"',]try:topic = str(sys.argv[1]).encode("utf-8")alert = str(sys.argv[2]).encode("utf-8")mailto = str(sys.argv[3]).encode("utf-8")except IndexError:for line in message:print line+'\n'sys.exit()cclist=[]#clist =[]sendmail("xxxx@xxx",mailto,cclist,alert, topic)备注:sendmail("xxxx@gmail.com",mailto,cclist,alert, topic)
发件人,收件人,抄送列表,正文内容,邮件标题Usage:sendmail.py "topic" "mail body text" "mail to"Examples of usage:sendmail.py "topic" "hello world" "14638852@qq.com"./sendmail.py "topic" "hello world" "14638852@qq.com"


smtp以及邮件的签名,还有发件人为定值,需要自己修改。





本文标签: 实用自动化运维Python脚本