站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

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

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

        下面進行集群環(huán)境初始化腳本的編寫,通過ssh + expect + scp實現(xiàn)服務(wù)器集群自動化搭建

        第一步,服務(wù)器準備
        這里使用docker模擬幾臺服務(wù)器,分別命名為node2,node3,node4(使用鏡像chenqionghe/Ubuntu,密碼統(tǒng)一為88888888),生產(chǎn)環(huán)境為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

        還得有一臺主控制服務(wù)器node1,負責操作所有的服務(wù)器節(jié)點

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

        初始化完成后進入node1節(jié)點

        ssh root@127.0.0.1 -p 2222

        安裝必須軟件

        apt-get install expect -y

        創(chuàng)建存放腳本的目錄~/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

        創(chuàng)建機器列表配置文件,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.無交互分發(fā)公鑰腳本,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.遠程批量執(zhí)行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 “執(zhí)行成功:$v”
            else
                echo “執(zhí)行失敗:$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.無交互分發(fā)公密鑰
        for v in ${HostList}
        do
            expect send-sshkey.exp ~/.ssh/id_rsa.pub ${v}
            if [ $? -eq 0 ];then
                echo “公鑰-發(fā)送成功:$v”
            else
                echo “公鑰-發(fā)送失敗:$v”
            fi
        done
        # 3.分發(fā)腳本文件(安裝軟件包)
        for v in ${HostList}
        do
            scp -P ${Port} -rp ~/env/scripts root@${v}:~
            if [ $? -eq 0 ];then
                echo “scripts-發(fā)送成功:$v”
            else
                echo “scripts-發(fā)送失敗:$v”
            fi
        done
        # 4.使用腳本文件安裝
        for v in ${HostList}
        do
            ssh -t -p ${Port} root@${v} /bin/bash ~/scripts/install.sh
        done

        到這里所有的文件已經(jīng)創(chuàng)建完成,整個env目錄結(jié)構(gòu)如下

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

        第三步 執(zhí)行自動化腳本查看效果

        sh auto-deploy.sh

        執(zhí)行成功結(jié)果

        spawn ssh-keygen

        公鑰-發(fā)送成功:node2

        公鑰-發(fā)送成功:node3

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

        Connection to node4 closed.

        出現(xiàn)上面的結(jié)果代表3個node節(jié)點已經(jīng)初始化完成,拷貝公鑰+安裝軟件成功!

        我們再來執(zhí)行一下遠程命令腳本,查看所有服務(wù)器系統(tǒng)類型

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

        執(zhí)行結(jié)果如下

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

        這樣就實現(xiàn)了自動化創(chuàng)建密鑰對+分發(fā)公鑰+所有服務(wù)器軟件環(huán)境安裝+批量遠程執(zhí)行腳本mssh.sh,麻雀雖小,五臟俱全,絕對是干貨!light weight baby!

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: www亚洲欲色成人久久精品| 国产精品美女免费视频观看| 欧美亚洲国产精品久久蜜芽| 欧美日韩精品一区二区三区不卡| 精品国产_亚洲人成在线高清| 亚洲精品无码久久一线| 国产一区二区三区精品视频| 国产精品精品自在线拍| 亚洲国产av无码精品| 精品久久久久久国产三级 | 国产精品美女久久久m| 欧美精品区一级片免费播放| 国产精品99久久久久久宅男| 国产精品国产精品国产专区不卡 | 国产日韩久久久精品影院首页| 国产精品国产三级国产AV主播| 亚洲精品国产精品国自产观看| 精品国产91久久久久久久a | 亚洲无码日韩精品第一页| 国内精品久久久久久久涩爱| 97久人人做人人妻人人玩精品| 国产精品免费网站| 2022国内精品免费福利视频| 久久久精品国产sm调教网站| 无码国内精品久久人妻蜜桃| 亚洲国产精品无码成人片久久| 亚洲精品tv久久久久久久久久| 久久久精品日本一区二区三区| 国产中文在线亚洲精品官网| 国产精品欧美久久久久天天影视| wwwvr高清亚洲精品二区| 99久久精品费精品国产| 91精品国产福利在线观看| 精品亚洲永久免费精品| 精品一区二区三区免费| 精品精品国产自在久久高清| 国内精品在线视频| 欧美日韩精品在线| 国产69精品久久久久99| 国精品无码A区一区二区| 欧美日韩精品系列一区二区三区|