多台linux服务器快速授信

一、工具

  • ssh-keygen 生成秘钥工具
  • ssh-copy-id 复制公钥到远程工具
  • pssh 远程执行命令工具
  • pscp 复制文件到远程服务器工具
  • pslurp 从远程复制文件到本机工具
  • python 2.7

二、操作步骤

  • 1、单向授权

    选择一台总控机,在本机生成ssh秘钥

    ssh-keygen -t rsa
    

    同步秘钥到远程服务器,简历单向授信

    ssh-copy-id -i  ~/.ssh/id_rsa.pub -p22444 [email protected]
    ssh-copy-id -i  ~/.ssh/id_rsa.pub -p22444 [email protected]
    //XXX 是你的用户名
    

    因为这一步需要输入密码,所以暂时没有发现可以快速操作的方法,如有其他更好的方法,请指教。
    已知方法中可以使用 && 连接多条命令,然后一直输入密码就行,格式如下

    ssh-copy-id -i  ~/.ssh/id_rsa.pub -p22444 [email protected] &&
    ssh-copy-id -i  ~/.ssh/id_rsa.pub -p22444 [email protected] &&
    ssh-copy-id -i  ~/.ssh/id_rsa.pub -p22444 [email protected] 
    

    做完这一步,可以从总控机器单向免密登陆到远程服务器,测试命令:

    pssh -h ips.txt -P 'date'
    

    如果命令执行结果显示有机器失败,是因为安全策略的问题,需要登录一下出错的远程机器,并且输入"yes"就好。

  • 2、每台机器生成秘钥

    pssh -h ~/ips.txt -P 'ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa'
    -h ssh登陆的地址列表
    -P 在远程机器上执行的命令
    
  • 3、把所有的公钥放到一个文件中
    拷贝远程生成的公钥到authorized_keys文件

    pslurp -L ~/tmp/ -h db-ips.txt ~/.ssh/id_rsa.pub id_rsa.pub
    -L 远程文件复制后存储在本机的目录
    -h ssh登陆的地址列表
    id_rsa.pub 表示远程文件复制过来后本地存放的名称
    

    从远程拷贝过来的文件,加入了机器ip的文件夹,我写了一个python脚本,目的是把远程拷贝过来的id_rsa.pub文件内容都放在一个文件中。
    新建一个python文件:

    vi copyToFile.py
    

    复制下面的脚本内容到文件中,修改自己的秘钥输出路径和读取文件的路径,并保存。注释可能引起错误,使用的时候请删除

    import os
    outFilePath='/tmp/authorized_keys'  #秘钥输出的地址
    readPath='/home/用户名/tmp' #读取文件的根路径,第三步中复制文件的路径
    def all_path(dirname):
        result = []
        for maindir, subdir, file_name_list in os.walk(dirname):
            for filename in file_name_list:
                apath = os.path.join(maindir, filename)
                if(filename=='id_rsa.pub'):
                    result.append(apath)
        return result
    with open(outFilePath,'a') as outFile:
            for path in all_path(readPath):
                    print("----------------write file---------------------")
                    with open(path) as inFile:
                            lines = inFile.readlines()
                            for line in lines:
                                    outFile.write(str(line))
                                    print(line)
                            inFile.close()
                    outFile.write("\n")
                    print("----------------write over--------------------------")
            outFile.close()
    

    运行python脚本

    python copyToFile.py
    

    警告:最重要的一步。不做这一步就会导致第一步的单向授信失效。
    上面的python脚本没有拷贝本机的公钥。所以需要手动增加一下。

    cat ~/.ssh/id_rsa.pub >> /home/XXX/tmp/authorized_keys
    
  • 4、替换本机的authorized_keys文件,并且把authorized_keys发送到每个机器
    复制文件到本机的.ssh目录:

    cp  /home/XXX/tmp/authorized_keys ~/.ssh/authorized_keys
    

    发送到远程的机器:

    pscp -h ips.txt ~/.ssh/authorized_keys ~/.ssh/
    # 如果出现pscp: 未找到命令。是因为新版的pssh安装后,pscp命令变成了pscp.pssh
    pscp.pssh  -h ips.txt ~/.ssh/authorized_keys ~/.ssh/
    

你可能感兴趣的:(linux,linux批量授信,linux授信,快速授信)