SSH 配置

#!/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 os
import sys
sys.path.append(‘../module‘)
from zgtz import idsTempDic,showServerStart,showServerEnd
import socket
import time
import pexpect
import paramiko
import 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 ===%10s\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 ===%10s\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()
时间: 2024-08-26 19:31:14

SSH 配置的相关文章

SSH配置环境都正常,但是每次执行到Action中的方法时就中断了,而且不报任何错误

SSH配置环境都正常,但是每次执行到Action中的方法时就不执行课,而且不报任何错误.Action中的方法封装的是业务层,业务层封装DAO层,检查了一天才发现错误在哪. 在applicationContext.xml中报了一个异常,如: Multiple annotations found at this line: - Exception 'com/dao/StudentDAO : Unsupported major.minor version 51.0' - Exception 'com/

centos ssh配置使用

配置 数据阶梯 CentOS SSH配置 默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此.所以这里就不介绍OpenSSH的安装了. SSH配置: 1.修改vi /etc/ssh/sshd_config,根据模板将要修改的参数注释去掉并修改参数值: Port 22 指定SSH连接的端口号,安全方面不建议使用默认22端口 Protocol 2,1 允许SSH1和SSH2连接,建议设置成 Protocal 2 其他参数根据自己的需要进行调整.配置方法详见: man ssh_con

linux 防火墙和SSH配置

一.防火墙配置 # vi /etc/sysconfig/iptables 下面防火墙规则文件例子(标红部分是需要改的内容) /////////////////////////////////////////////////////////////////////////////////////////////////// # Firewall configuration written by system-config-securitylevel # Manual customization o

H3C交换机SSH配置完全攻略---转载

使用SSH+密码认证(基本SSH配置方法) 注:在用户使用SSH登录交换机时,交换机对所要登录的用户使用密码对其进行身份验证 生成RSA和DSA密钥对 [H3C]public-key local create rsa [H3C]public-key local create dsa 设置用户接口上的认证模式为AAA,并让用户接口支持SSH协议 [H3C]user-interface vty 0 4 [H3C-ui-vty0-4]authentication-mode scheme [H3C-ui

ssh配置服务及如何构建私有CA

构建私有CA及SSH配置服务 在了解如何构建私有CA之前,先来熟悉基础概念:CA表示证书颁发机构.PKI表示公钥基础设施.RA证书的注册机构.CRL证书的吊销列表.构架CA时还会涉及到一些加密方式,这里来了解一些加密类型. 几种加密方式及其区别:单项加密:主要用于数据的提取特征值,验证通信内容的完整性.对称加密:成对密钥,且双方密钥相同.一般用于加密通信内容,效率高安全性不好.公钥加密:成对密钥,但是密钥存在公钥和私钥,效率低,安全性好. CA存在的作用和意义:是用来增加通信资源可靠性的证书颁发

ssh配置公钥私钥(key)登录SecureCRT

在用windows时管理linux服务器时,常会用到SecureCRT.Xshell以及开源的putty.在我工作环境大多都是采用密码认证的方式进行登录.今天对学习了些SecureCRT的密钥登录方式.对比密码认证方式,使用密钥认证登录会有以下几个优点: 1.公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦2.多用户管理服务器时,可以通过多个公钥登录同一用户下,可以避免因为密码认证被用户都需要密码,导致的密码容易泄密的危险.并且使用passwd修改密码,也不会影响到其他用户的登录.3.做

FreeBSD系统SSH配置详解并能使用su

修改freebsd可以用sshd权限用户登录ssh 但不能用root用户登录的方法 在/etc/ssh/sshd_config最后中加入 PermitRootLogin yes #允许root登录 PermitEmptyPasswords no #不允许空密码登录 PasswordAuthentication yes # 设置是否使用口令验证. 就可以了 FreeBSD SSH配置详解 首先vi编辑/etc/inetd.conf,去掉ssh前的#,保存退出 (开启****ssh服务) 编辑/et

cisco+H3C交换机SSH配置实例

Cisco交换机+H3C交换机SSH配置(cisco关闭Telnet) Cisco交换机 进入交换机配置模式: a)        CoreSW#configure terminal 配置交换机名称: a)        CoreSW(config)#hostname CoreSW(可选配置). 配置domain-name: a)        CoreSW(config)#ip domain-namexxxxx.com(名称按自己要求而定). 配置登录用户和密码(如有本地用户可不创建). a)

github的SSH配置如下

Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git config --global user.name "xuhaiyan" $ git config --global user.email "[email protected]" 二.生成SSH密钥过程: 1.查看是否已经有了ssh密钥:cd ~/.ssh 如果没有密

Solaris ssh配置主机间信任关系

假设需要配置从主机com00biiitf001登录主机ols00biiitf001时不需要密码,则采用以下步骤配置: com00biiitf001上产生公用/私有密钥对 $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/export/home/jyu/.ssh/id_rsa): Created directory '/export/home/jyu/.