站長資訊網
        最全最豐富的資訊網站

        Linux集群自動化搭建(生成密鑰對+分發公鑰+遠程批量執行腳本)

        之前介紹過ansible的使用,通過ssh授權批量控制服務器集群 但是生成密鑰和分發公鑰的時候都是需要確認密碼的,這一步也是可以自動化的,利用ssh + expect + scp就可以實現,其實只用這幾個命令結合也可以實現類似ansible的功能了 為了遠程操作服務器進行環境初始化,總結我們都需要以下幾步操作 1.ssh-keygen生成密鑰對 2.將生成的公鑰發送到node服務器 3.scp拷貝安裝包到node服務器 4.ssh遠程執行拷貝過去的安裝包

        下面進行集群環境初始化腳本的編寫,通過ssh + expect + scp實現服務器集群自動化搭建

        第一步,服務器準備
        這里使用docker模擬幾臺服務器,分別命名為node2,node3,node4(使用鏡像chenqionghe/Ubuntu,密碼統一為88888888),生產環境為ip或host

        docker run -d –name node2 -p 2223:22 chenqionghe/ubuntu
        docker run -d –name node3 -p 2224:22 chenqionghe/ubuntu
        docker run -d –name node4 -p 2225:22 chenqionghe/ubuntu

        還得有一臺主控制服務器node1,負責操作所有的服務器節點

        docker run -d –name node1 -p 2222:22
        –link node2:node2
        –link node3:node3
        –link node4:node4
        chenqionghe/ubuntu

        初始化完成后進入node1節點

        ssh root@127.0.0.1 -p 2222

        安裝必須軟件

        apt-get install expect -y

        創建存放腳本的目錄~/env

        mkdir -p ~/env && cd ~/env

        這里先模擬一個簡單的安裝包scripts/install.sh,安裝vim命令

        mkdir scripts
        cat > scripts/install.sh <<EOF
        #!/bin/bash bash
        apt-get install vim -y
        EOF

        創建機器列表配置文件,vim nodes.txt

        node2
        node3
        node4

        第二步 編寫自動化腳本
        1.無交互ssh-keygen生成密鑰對腳本,vim ssh-keygen.exp

        #!/usr/bin/expect
        #set enter “n”
        spawn ssh-keygen
        expect {
                “*(/root/.ssh/id_rsa)” {send “r”;exp_continue}
                “*(empty for no passphrase)” {send “r”;exp_continue}
                “*again” {send “r”}
        }
        expect eof

        2.無交互分發公鑰腳本,vim send-sshkey.exp

        #!/usr/bin/expect
        if { $argc != 2 } {
         send_user “usage: expect send-sshkey.exp file hostn”
         exit
        }
        #define var
        set file [lindex $argv 0]
        set host [lindex $argv 1]
        set password “88888888”
        spawn ssh-copy-id -i $file -p 22 root@$host
        expect {
                “yes/no” {send “yesr”;exp_continue}
                “*password” {send “$passwordr”}
        }
        expect eof 

        3.遠程批量執行ssh腳本, vim mssh.sh

        #!/bin/bash
        Port=22
        if [ $# -lt 1 ];then
            echo “Usage: `basename $0` command”
            exit
        fi
        echo $@
        for v in `cat nodes.txt`
        do
            ssh -t -p ${Port} root@${v} $@
            if [ $? -eq 0 ];then
                echo “執行成功:$v”
            else
                echo “執行失敗:$v”
            fi
        done

        4.自動化部署腳本,vim auto-deploy.sh

        #!/usr/bin/env bash
        #機器列表
        HostList=`cat nodes.txt`
        #端口號
        Port=22
        # 1.無交互生成密鑰對
        if [ ! -f ~/.ssh/id_rsa.pub ];then
            expect ssh-keygen.exp
        fi
        # 2.無交互分發公密鑰
        for v in ${HostList}
        do
            expect send-sshkey.exp ~/.ssh/id_rsa.pub ${v}
            if [ $? -eq 0 ];then
                echo “公鑰-發送成功:$v”
            else
                echo “公鑰-發送失敗:$v”
            fi
        done
        # 3.分發腳本文件(安裝軟件包)
        for v in ${HostList}
        do
            scp -P ${Port} -rp ~/env/scripts root@${v}:~
            if [ $? -eq 0 ];then
                echo “scripts-發送成功:$v”
            else
                echo “scripts-發送失敗:$v”
            fi
        done
        # 4.使用腳本文件安裝
        for v in ${HostList}
        do
            ssh -t -p ${Port} root@${v} /bin/bash ~/scripts/install.sh
        done

        到這里所有的文件已經創建完成,整個env目錄結構如下

        ├── auto-deploy.sh
        ├── mssh.sh
        ├── nodes.txt
        ├── scripts
        │  └── install.sh
        ├── send-sshkey.exp
        └── ssh-keygen.exp

        第三步 執行自動化腳本查看效果

        sh auto-deploy.sh

        執行成功結果

        spawn ssh-keygen

        公鑰-發送成功:node2

        公鑰-發送成功:node3

        公鑰-發送成功:node4
        install.sh 100% 40 41.4KB/s 00:00
        scripts-發送成功:node2
        install.sh 100% 40 45.0KB/s 00:00
        scripts-發送成功:node3
        install.sh 100% 40 39.9KB/s 00:00
        scripts-發送成功:node4

        Connection to node4 closed.

        出現上面的結果代表3個node節點已經初始化完成,拷貝公鑰+安裝軟件成功!

        我們再來執行一下遠程命令腳本,查看所有服務器系統類型

        sh mssh.sh “cat /etc/os-release|head -n 1”

        執行結果如下

        cat /etc/os-release|head -n 1
        NAME=”Ubuntu”
        Connection to node2 closed.
        執行成功:node2
        NAME=”Ubuntu”
        Connection to node3 closed.
        執行成功:node3
        NAME=”Ubuntu”
        Connection to node4 closed.
        執行成功:node4

        這樣就實現了自動化創建密鑰對+分發公鑰+所有服務器軟件環境安裝+批量遠程執行腳本mssh.sh,麻雀雖小,五臟俱全,絕對是干貨!light weight baby!

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 成人午夜精品久久久久久久小说| 国内精品欧美久久精品| 四虎影视884a精品国产四虎| 中文字幕无码久久精品青草| 国产精品JIZZ在线观看老狼| 精品永久久福利一区二区| 热RE99久久精品国产66热| 国产99久久九九精品无码| 国产精品三级在线| 久久精品九九亚洲精品| 亚洲精品国产电影| 久久伊人精品青青草原日本| 99九九精品免费视频观看| 97久久久久人妻精品专区| 精品国产乱码一区二区三区| 日韩精品专区在线影院重磅| 亚洲精品人成无码中文毛片| 麻豆国内精品久久久久久| 国内精品视频九九九九| 国产午夜精品久久久久九九电影| 2021国产成人精品久久| 无码精品一区二区三区免费视频| 55夜色66夜色国产精品视频| 精品无码一区二区三区爱欲 | 人人妻人人澡人人爽人人精品97| 欧美日韩精品一区二区三区不卡 | 91老司机深夜福利精品视频在线观看 | 极品精品国产超清自在线观看| 精品国产三级a在线观看| 久久久久久亚洲精品成人| 无码人妻精品一区二区三区久久| 亚洲中文字幕久久精品无码喷水| 亚洲欧美国产∧v精品综合网| 日韩三级精品| 一本久久a久久精品vr综合| 无码国内精品久久人妻蜜桃| 久久夜色精品国产噜噜亚洲AV| 久久久久99精品成人片欧美| 久久99精品久久久久久久不卡 | 国内精品久久国产大陆| 99精品全国免费观看视频..|