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

        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號
        主站蜘蛛池模板: 国产精品美女久久久久久2018| 国产亚洲婷婷香蕉久久精品| 1000部精品久久久久久久久| 欧美国产精品va在线观看| 精品亚洲A∨无码一区二区三区| 久久93精品国产91久久综合| 麻豆精品不卡国产免费看| 精品无码AV一区二区三区不卡 | 久久久精品人妻一区二区三区蜜桃| 99在线观看视频免费精品9| 国产精品免费高清在线观看| 无夜精品久久久久久| 精品国产免费人成网站| 久久精品免费一区二区三区| 国产成人精品午夜福利| 日韩精品区一区二区三VR| 亚洲国产精品无码久久久久久曰| 国产亚洲精品拍拍拍拍拍| 99精品福利国产在线| 久久精品国产秦先生| 国产精品福利一区二区| 999在线视频精品免费播放观看| 久久精品黄AA片一区二区三区| 亚洲精品国产精品乱码不卡√ | 久久精品中文字幕久久| 99re6在线视频精品免费| 久久精品人成免费| 久久夜色精品国产噜噜噜亚洲AV| 一区二区国产精品 | 久久99精品国产99久久6| 国产乱人伦偷精品视频不卡| 91亚洲精品麻豆| 国产高清日韩精品欧美激情| 国产成人精品cao在线| 99热日韩这里只有精品| 国产精品狼人久久久久影院 | 亚洲а∨天堂久久精品9966| 亚洲精品二三区| 中文字幕精品一区二区精品| 四虎成人精品无码| 国语自产精品视频在线区|