热门IT资讯网

SSH 配置

发表于:2024-11-27 作者:热门IT资讯网编辑
编辑最后更新 2024年11月27日,#!/usr/bin/env python#-*- encoding:utf8 -*-#--------------------------------------------------------
#!/usr/bin/env python#-*- encoding:utf8 -*-#---------------------------------------------------------------------------------------#           FILE:    sshd.py#          USAGE:    sshd.py#    DESCRIPTION:    Copy python style guide and coding standard .#                    The default copy example is the current text .#                    Dont.t find text on other directories .#        OPTIONS:    see fuction '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-2014 Python, All Rights Reserved#---------------------------------------------------------------------------------------# import python module#---------------------------------------------------------------------------------------#   define python import modules .#---------------------------------------------------------------------------------------import osimport syssys.path.append('../module')from zgtz import idsTempDic,showServerStart,showServerEndimport socketimport timeimport pexpectimport paramikoimport getpass#   Python Function comments#======== Function  ====================================================================#          NAME:        #   DESCRIPTION:    Display usage information for this script.#  PARAMETER  1:    ---#=======================================================================================class SSH(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 = "RSA keygen"     dsa_cmd = "DSA keygen"    record_log = 'ssh日志文件'    t1 = "函数启动时间"    t2 = "函数结束时间"    def __init__(self):        self.user = "root"         self.port = 22        self.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 -t rsa "        self.dsa_cmd = "/usr/bin/ssh-keygen -t dsa "        self.record_log = "./tmp/paramiko.log"        self.t1 = time.time()    def key_rw(self,host):        self.host = host        if os.path.exists(self.local_path+self.auth_key_file) and os.path.getsize(self.local_path+self.auth_key_file) != 0 :            print "%sFileName ===s\tCVM_Address === %s\t[ CVM 跳板机 Is Exists ! ]  %s" %(rx,self.auth_key_file,self.host,ry)            all = []            os.chdir(self.local_path)            Fname= open(self.auth_key_file,'r')            for line in Fname:                #print line                all.append(line)            return all            Fname.close()         else:            try:                all = []                ls = os.linesep                rdsa=['rsa', 'dsa']                #print self.local_path                os.chdir(self.local_path)                try:                    for i in rdsa:                        FName = open('id_%s.pub'%(str(i)))                        for line in FName:                            #print line.rstrip('\n'),                            all.append(line)                    F_KEY = open(self.local_path+self.auth_key_file,'w')                    F_KEY.writelines(['%s%s'% (x,ls)for x in all])                    print "%sFileName ===s\tCVM_Address === %s\t[ CVM 跳板机 NoKey OK ] %s" %(rx,self.auth_key_file,self.host,ry)                    return all                    FName.close()                    F_KEY.close()                except IOError ,e:                    print "*** file open failed:",e            except:                print "Open %s file failed !" %(self.auth_key_file)                raise    def rsync_ssh(self,host):        self.host = host        try:                scp = paramiko.Transport((self.host,self.port))            scp.connect(username=self.user,password=self.passwd)            sftp = paramiko.SFTPClient.from_transport(scp)        except Exception,e:            print e            scp.close()        else:            try:                sftp.mkdir(self.remote_path)            except IOError:                #print('(assuming ~/.ssh already exists)')                with sftp.open(self.remote_path+self.auth_key_file,'a+') as f:                    f.write("#Create SSH Address == %s\n"%(self.host))                with open(self.local_path+self.public_rsa_file,'r') as f:                     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[ Finish NoKey OK ]%s' %(rx,self.auth_key_file,self.host,ry)            else:                with sftp.open(self.remote_path+self.auth_key_file, 'w') as f:                    f.write("#This Is NoKey Record .\n")                with open(self.local_path+self.public_rsa_file,'r') as f:                    data = f.read()                sftp.open(self.remote_path+self.auth_key_file,'w').write(data)                print '%sFileName ===%s\tCVM_Address === %s\t[ Finish NoKey OK ]%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=lambda d:int(d[0]))    for k,v in ids_sorted:        print '\t'.join(v)    showEnd = showServerEnd()    while True:        ids = []        errids = []        try:            inputs=str(raw_input('%s请输入CVM_ID[多个请用空格隔开,全部(all),反选("-"开头),返回(b)]:%s'%(rx,ry)).strip().lower())            print inputs            #inputs=raw_input('请输入CVM_ID[多个请用空格隔开,全部(all),反选("-"开头),返回(b)]:').strip().lower()            if inputs == "b":                print '%s您没有选择,返回主界面! %s'%(rx,ry)                raw_input()                continue            elif inputs == "all":                ids = temp_data.keys() # 此处返回字典key,类型为list类型                #print ids                break            elif inputs.startswith('-'):                ex = inputs[1:].split()                #print ''.join(ex)                all = temp_data.keys()                ids = [x for x in all if x not in ex] #反选后的CVM_ID                exids = [x for x in ex if x not in all] #反选CVM_ID                break            else:                ids = inputs.split()                ids=sorted(set(ids),key=ids.index)                for id in ids:                    running = temp_data.has_key(id)                    if running == False:                        ids.remove(id)                        errids.append(id)                        print ids                    elif running == True:                        print "%s输入正确的CVM_ID:%s %s"%(rx,id,ry)                    else:                        raise ValueError            break           except (NameError,KeyboardInterrupt):            print "\n"            sys.exit()        except (ValueError,KeyError):            print "%s 无此CVM_ID,输入错误,请重新输入! %s"%(rx,ry)              raw_input()                if not ids:        print "%s你输入的CVM_ID有误%s"%(rx,ry)    if inputs == "all":        print "%s选择所有服务器 %s"%(rx,ry)    elif inputs.startswith('-'):        #print exids        print "\033[1;33;40m去除的id为:%s\033[0m "%",".join(ex)        print "\033[1;33;40m反选后id为:\033[0m",        for gid in ids:            name = temp_data[gid][0]            if name:                print name+' ',        print '\t'                        else:        print "\033[1;33;40m去除的id为:%s\033[0m "%",".join(ids)        print "对应的游戏服为:",        for gid in ids:            name = temp_data[gid][0]            if name:                print name+' ',    if errids:        print "%s你输入的id部分有误,已经排除:%s"%(rx,ry)        print '\t'.join(errids)    try:        if raw_input("\n确认?(y/n)") == "y":            print "%s更新的CVM_ID为%s:"%(rx,ry)+' '.join(ids)            sshdir ="~/.ssh"            if os.path.exists(sshdir):                pass            else:                for gid in ids:                    Host_Wan = temp_data[gid][3]                    Host_Lan = temp_data[gid][4]                    print Host_Wan,Host_Lan                     if Host_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)                        except Exception as e:                            print e                print "%s所选CVM_ID %s已经更新完成! %s"%(rx,ids,ry)                else:            sys.exit()     except (KeyboardInterrupt,EOFError):        print "\n"        sys.exit()


0