#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import time
import argparse
import datetime
import paramiko
reload(sys)
sys.setdefaultencoding("utf-8")
username = 'root'
password = '123456'
rsa = [
'ssh-rsa1',
'ssh-rsa2 '
]
#change return color
def G(s):
return "%s[32;2m%s%s[0m"%(chr(27), s, chr(27))
def R(s):
return "%s[31;2m%s%s[0m"%(chr(27), s, chr(27))
def cmd_exc(ip, username, password):
conn = paramiko.SSHClient()
conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
conn.connect(hostname = ip, username = username, password = password, timeout = 5)
stdin, stdout, stderr = conn.exec_command(cmd)
result = stdout.readlines()
ret = ''.join(result)
except:
print R("无法连接")
conn.close()
try:
return G(ret)
except UnboundLocalError:
pass
def copy_rsa(ip, username, password):
conn = paramiko.SSHClient()
conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
conn.connect(hostname = ip, username = username, password = password, timeout = 5)
stdin, stdout, stderr = conn.exec_command("echo '{0}'>>/root/.ssh/authorized_keys;echo '{1}'>>/root/.ssh/authorized_keys".format(rsa[0], rsa[1]))
result = stdout.readlines()
ret = ''.join(result)
except:
print R("无法连接")
conn.close()
try:
return G(ret)
except UnboundLocalError:
pass
def auto_disk(Disk):
if os.path.exists('./auto_disk.sh'):
os.remove('./auto_disk.sh')
with open('auto_disk.sh', 'a') as f:
print >>f, '#!/bin/bash'
print >>f, 'rpm -aq|grep expect'
print >>f, 'if [ $? != 0 ];then'
print >>f, ' yum install -y expect'
print >>f, 'fi'
print >>f, '/usr/bin/expect -c"'
print >>f, 'set timeout -1'
print >>f, 'spawn /sbin/fdisk /dev/{0}'.format(Disk)
print >>f, 'expect \"*m for help*:\"'
print >>f, 'send -- \"n\r\"'
print >>f, 'expect \"*p*\n\"'
print >>f, 'send -- \"p\r\"'
print >>f, 'expect \"*number (1-4):\"'
print >>f, 'send -- \"1\r\"'
print >>f, 'expect \"*default 1*:\"'
print >>f, 'send -- \"\r\"'
print >>f, 'expect \"*default*:\"'
print >>f, 'send -- \"\r\"'
print >>f, 'expect \"*m for help*:\"'
print >>f, 'send -- \"w\r\"'
print >>f, 'expect eof'
print >>f, '"'
print >>f, 'mkfs.ext4 /dev/{0}1'.format(Disk)
print >>f, 'echo "/dev/{0}1 /home/ ext4 defaults 0 0" >> /etc/fstab'.format(Disk)
print >>f, 'mount /dev/{0}1 /home/'.format(Disk)
def sftp_auto(ip, username, password):
t = paramiko.Transport((ip,22))
t.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('./auto_disk.sh','/tmp/auto_disk.sh')
t.close()
conn = paramiko.SSHClient()
conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
conn.connect(hostname = ip, username = username, password = password, timeout = 5)
stdin, stdout, stderr = conn.exec_command('sh /tmp/auto_disk.sh')
result = stdout.readlines()
ret = ''.join(result)
except:
print R("无法连接")
conn.close()
try:
return G(ret)
except UnboundLocalError:
pass
if __name__ == "__main__":
parser=argparse.ArgumentParser(description='ssh_cmd', usage='%(prog)s [options]')
parser.add_argument('-H','--host', nargs='?', dest='listhost', help='主机/多个主机用","分割')
parser.add_argument('-f','--file', nargs='?', dest='filehost', help='主机列表文件')
parser.add_argument('-m','--command', nargs='?', dest='command', help='执行命令')
parser.add_argument('-I','--init', nargs='?', dest='init', help='自动分区挂盘')
parser.add_argument('-A','--add', nargs='?', dest='add_rsa', help='添加信任')
if len(sys.argv)==1:
parser.print_help()
else:
args=parser.parse_args()
cmd = args.command
if args.listhost is not None and args.filehost is None:
if args.command is not None:
for ip in args.listhost.split(','):
print G(ip)
print G('-'*80)
print cmd_exc(ip, username, password)
print
elif args.init is not None:
auto_disk(args.init)
for ip in args.listhost.split(','):
print G(ip)
print G('-'*80)
print sftp_auto(ip, username, password)
print
elif args.add_rsa == 'root':
for ip in args.listhost.split(','):
print G(ip)
print G('-'*80)
print copy_rsa(ip, username, password)
print
else:
print R('功能选项为空')
elif args.listhost is None and args.filehost is not None:
if args.command is not None:
try:
with open(args.filehost) as f:
for ips in f.readlines():
ip = ips.replace('\n', '')
print G(ip)
print G('-'*80)
print cmd_exc(ip, username, password)
print
except IOError:
print R('主机列表文件不存在')
elif args.init is not None:
auto_disk(args.init)
for ip in args.listhost.split(','):
print G(ip)
print G('-'*80)
print sftp_auto(ip, username, password)
print
elif args.add_rsa == 'root':
for ip in args.listhost.split(','):
print G(ip)
print G('-'*80)
print copy_rsa(ip, username, password)
print
else:
print R('功能选项为空')
else:
print R('主机或命令不能为空')
转载于:https://my.oschina.net/honglongwei/blog/670892