SSH 配置
#!/usr/bin/envpython#-*-encoding:utf8-*-#---------------------------------------------------------------------------------------#FILE:sshd.py#USAGE:sshd.py#DESCRIPTION:Copypythonstyleguideandcodingstandard.#Thedefaultcopyexampleisthecurrenttext.#Dont.tfindtextonotherdirectories.#OPTIONS:seefuction'usage'below#BUGS:---#AUTHOR:Dr.-Vision.Simple(sp)#VERSION:1.0#CREATED:08.18.2014-10:15:30#REVISION:12.02.2014#PROJECT:XXX#COPYRITHT:Copyright(c)2002-2014Python,AllRightsReserved#---------------------------------------------------------------------------------------#importpythonmodule#---------------------------------------------------------------------------------------#definepythonimportmodules.#---------------------------------------------------------------------------------------importosimportsyssys.path.append('../module')fromzgtzimportidsTempDic,showServerStart,showServerEndimportsocketimporttimeimportpexpectimportparamikoimportgetpass#PythonFunctioncomments#========Function====================================================================#NAME:#DESCRIPTION:Displayusageinformationforthisscript.#PARAMETER1:---#=======================================================================================classSSH(object):user="用户名"port="端口"passwd="明文密码"cmd="命令行"local_path="本地路径"remote_path="远程路径"known_host="host文件"public_rsa_file="RSA公钥文件"private_rsa_file="RSA私钥文件"public_dsa_file="DSA公钥文件"private_dsa_file="DSA私钥文件"auth_key_file="authorized_keys"rsa_cmd="RSAkeygen"dsa_cmd="DSAkeygen"record_log='ssh日志文件't1="函数启动时间"t2="函数结束时间"def__init__(self):self.user="root"self.port=22self.passwd=""self.cmd="ls./tmp"self.local_path=os.environ['HOME']+'/.ssh/'self.remote_path=os.environ['HOME']+'/.ssh/'self.known_host="known_hosts"self.public_dsa_file="id_dsa.pub"self.private_dsa_file="id_dsa"self.public_rsa_file="id_rsa.pub"self.private_rsa_file="id_rsa"self.auth_key_file="authorized_keys"self.rsa_cmd="/usr/bin/ssh-keygen-trsa"self.dsa_cmd="/usr/bin/ssh-keygen-tdsa"self.record_log="./tmp/paramiko.log"self.t1=time.time()defkey_rw(self,host):self.host=hostifos.path.exists(self.local_path+self.auth_key_file)andos.path.getsize(self.local_path+self.auth_key_file)!=0:print"%sFileName===%10s\tCVM_Address===%s\t[CVM跳板机IsExists!]%s"%(rx,self.auth_key_file,self.host,ry)all=[]os.chdir(self.local_path)Fname=open(self.auth_key_file,'r')forlineinFname:#printlineall.append(line)returnallFname.close()else:try:all=[]ls=os.lineseprdsa=['rsa','dsa']#printself.local_pathos.chdir(self.local_path)try:foriinrdsa:FName=open('id_%s.pub'%(str(i)))forlineinFName:#printline.rstrip('\n'),all.append(line)F_KEY=open(self.local_path+self.auth_key_file,'w')F_KEY.writelines(['%s%s'%(x,ls)forxinall])print"%sFileName===%10s\tCVM_Address===%s\t[CVM跳板机NoKeyOK]%s"%(rx,self.auth_key_file,self.host,ry)returnallFName.close()F_KEY.close()exceptIOError,e:print"***fileopenfailed:",eexcept:print"Open%sfilefailed!"%(self.auth_key_file)raisedefrsync_ssh(self,host):self.host=hosttry:scp=paramiko.Transport((self.host,self.port))scp.connect(username=self.user,password=self.passwd)sftp=paramiko.SFTPClient.from_transport(scp)exceptException,e:printescp.close()else:try:sftp.mkdir(self.remote_path)exceptIOError:#print('(assuming~/.sshalreadyexists)')withsftp.open(self.remote_path+self.auth_key_file,'a+')asf:f.write("#CreateSSHAddress==%s\n"%(self.host))withopen(self.local_path+self.public_rsa_file,'r')asf:data=f.read()sftp.open(self.remote_path+self.auth_key_file,'a+').write(data)sftp.open(self.remote_path+self.auth_key_file,'a').write('\n')print'%sFileName===%s\tCVM_Address===%s\t[FinishNoKeyOK]%s'%(rx,self.auth_key_file,self.host,ry)else:withsftp.open(self.remote_path+self.auth_key_file,'w')asf:f.write("#ThisIsNoKeyRecord.\n")withopen(self.local_path+self.public_rsa_file,'r')asf:data=f.read()sftp.open(self.remote_path+self.auth_key_file,'w').write(data)print'%sFileName===%s\tCVM_Address===%s\t[FinishNoKeyOK]%s'%(rx,self.auth_key_file,self.host,ry)if__name__=='__main__':#格式化打印star="\033[1;33;40m=\033[0m"rx="\033[1;33;40m"ry="\033[0m"showStart=showServerStart()temp_data=idsTempDic()ids_sorted=sorted(temp_data.items(),key=lambdad:int(d[0]))fork,vinids_sorted:print'\t'.join(v)showEnd=showServerEnd()whileTrue:ids=[]errids=[]try:inputs=str(raw_input('%s请输入CVM_ID[多个请用空格隔开,全部(all),反选("-"开头),返回(b)]:%s'%(rx,ry)).strip().lower())printinputs#inputs=raw_input('请输入CVM_ID[多个请用空格隔开,全部(all),反选("-"开头),返回(b)]:').strip().lower()ifinputs=="b":print'%s您没有选择,返回主界面!%s'%(rx,ry)raw_input()continueelifinputs=="all":ids=temp_data.keys()#此处返回字典key,类型为list类型#printidsbreakelifinputs.startswith('-'):ex=inputs[1:].split()#print''.join(ex)all=temp_data.keys()ids=[xforxinallifxnotinex]#反选后的CVM_IDexids=[xforxinexifxnotinall]#反选CVM_IDbreakelse:ids=inputs.split()ids=sorted(set(ids),key=ids.index)foridinids:running=temp_data.has_key(id)ifrunning==False:ids.remove(id)errids.append(id)printidselifrunning==True:print"%s输入正确的CVM_ID:%s%s"%(rx,id,ry)else:raiseValueErrorbreakexcept(NameError,KeyboardInterrupt):print"\n"sys.exit()except(ValueError,KeyError):print"%s无此CVM_ID,输入错误,请重新输入!%s"%(rx,ry)raw_input()ifnotids:print"%s你输入的CVM_ID有误%s"%(rx,ry)ifinputs=="all":print"%s选择所有服务器%s"%(rx,ry)elifinputs.startswith('-'):#printexidsprint"\033[1;33;40m去除的id为:%s\033[0m"%",".join(ex)print"\033[1;33;40m反选后id为:\033[0m",forgidinids:name=temp_data[gid][0]ifname:printname+'',print'\t'else:print"\033[1;33;40m去除的id为:%s\033[0m"%",".join(ids)print"对应的游戏服为:",forgidinids:name=temp_data[gid][0]ifname:printname+'',iferrids:print"%s你输入的id部分有误,已经排除:%s"%(rx,ry)print'\t'.join(errids)try:ifraw_input("\n确认?(y/n)")=="y":print"%s更新的CVM_ID为%s:"%(rx,ry)+''.join(ids)sshdir="~/.ssh"ifos.path.exists(sshdir):passelse:forgidinids:Host_Wan=temp_data[gid][3]Host_Lan=temp_data[gid][4]printHost_Wan,Host_LanifHost_Lan=="10.1.1.1":SSH2=SSH()#SSH2.key_rw(Host_Wan)#SSH2.rsync_ssh(Host_Lan)print"%s跳过运维跳板机%s"else:try:SSH2=SSH()SSH2.rsync_ssh(Host_Lan)SSH2.known_hosts(Host_Lan)SSH2.known_hosts(Host_Wan)exceptExceptionase:printeprint"%s所选CVM_ID%s已经更新完成!%s"%(rx,ids,ry)else:sys.exit()except(KeyboardInterrupt,EOFError):print"\n"sys.exit()
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。