国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

服務器批量管理工具的快速開發

2024-06-28 13:27:19
字體:
來源:轉載
供稿:網友
服務器批量管理工具的快速開發

我張開心胸

無情的人笑我癡 我笑無情人懵懂

我愿意在她手掌之中

醉春風 我醉春風

——《倚天屠龍記•醉春風》

當我們需要控制一個局域網中的很多臺服務器時,一個簡單的全局操作可能會被放大地異常繁瑣,這時我們就會需要新的工具來快速完成這種工作。

我們將使用ssh客戶端提供的一些工具來快速完成這一開發工作,我們的開發平臺是GNU/linux。

下面即是我們整個系統的鳥瞰圖:

第一個工具:

要建立非交互式的ssh連接,采用客戶端公鑰認證登錄的方式是一種很棒的方法。

第一個工具的功能是,將本地ssh客戶端的公鑰追加到各SlaveServers的/root/.ssh/authorized_keys文件中,以實現ssh公鑰登錄的認證。

具體實現如下:

SlaveServer.conf
1 #global var: glServerList2 glServerList="192.168.31.98 /3               192.168.31.3  /4               192.168.31.4  /5               192.168.31.5  /6               192.168.31.6"
RSAPublicKeyBroadCast.sh
 1 #!/bin/bash 2  3 . SlaveServer.conf 4  5 function SSH_RSAPublicKeyBroadCast () { 6   # $1 : sshd port like : 3198 7   ssh-keygen 8   declare RSApk_path=/root/.ssh/id_rsa.pub 9   declare clientRSApk=`cat ${RSApk_path}`10   declare i11   for i in $glServerList12   do13     echo "communicating via ssh with $i ... ..."14     ssh -o GSSAPIAuthentication=no -p "$1" root@${i} "mkdir ~/.ssh ; echo ${clientRSApk} >> ~/.ssh/authorized_keys"15   done16 }17 SSH_RSAPublicKeyBroadCast "$1"

其使用、驗證請看附錄。

第二個工具:

當我們需要將一個本地文件傳送到所有SlaveServer的一個相同路徑時,我們便需要一個工具來完成這樣的任務。

例如:當我們想統一調整所有SlaveServer的sshd服務的參數時,我們需要改變所有SlaveServer上的/etc/ssh/sshd_config文件,這時第二個工具將發揮它的威力。

具體實現如下:

FileBroadCast.sh
 1  #!/bin/bash 2  3 . SlaveServer.conf 4  5 function SSH_FileBroadCast () { 6 # $1 : sshd port like : 3198 7 # $2 : src :local file path like /etc/ssh/sshd_config 8 # $3 : dest: remote server file path like /etc/ssh/sshd_config  9 declare i10 for i in $glServerList11 do12   echo "communicating via ssh with $i ... ..."13   scp -o GSSAPIAuthentication=no -P "$1" "$2" root@${i}:${3}  14 done15 }16 17 SSH_FileBroadCast "$1" "$2" "$3"

其使用、驗證請看附錄。

第三個工具:

在完成第二個工具后,我們有了向所有SlaveServer傳送文件的能力,但是,如何向其所有發送"service sshd reload"命令呢?

于是,我們的第三個工具,CommandBroadCast入場。

具體實現如下:

CommandBroadCast.sh
 1 #!/bin/bash 2   3 . SlaveServer.conf 4  5 function SSH_CommandBroadCast () { 6 # $1 : sshd port like : 3198 7 # $2 : command like ' service sshd reload ' 8 declare i 9 for i in $glServerList10 do11   echo "communicating via ssh with $i ... ..."12   ssh -o GSSAPIAuthentication=no -p "$1" root@${i} "${2}"13 done14 }15 16 SSH_CommandBroadCast "$1" "$2"

其使用、驗證請看附錄。

第四個工具:

第三個工具可以讓我們控制所有的SlaveServer執行我們指定的一段命令,但是,如果我們想讓它們執行本地的一個bash腳本呢?

如此,第四個工具的功能是命令所有SlaveServer執行我們在本地定義的一個bash腳本文件。

具體實現如下:

AllSlaveExecLocalScripts.sh
#!/bin/bash. SlaveServer.conffunction SSH_RemoteServerExecLocalScripts () {# $1 remoteServerArgs like: root@192.168.31.2# $2 remoteServer SSH Daemon's port like: 3198# $3 local bash scripts you want the remoteServer to execdeclare tempFile=`mktemp` #local tmp declare remoteTmpDirif ssh -o GSSAPIAuthentication=no -p "$2" "$1" 'declare tempDir=`mktemp -d` ; chmod 700 $tempDir ; chown root:root $tempDir ; cd $tempDir ; unset tempDir ; pwd ' 1> $tempFile then  remoteTmpDir=`tail -1 $tempFile`  scp -o GSSAPIAuthentication=no -P "$2" "$3" ${1}:$remoteTmpDir 1>/dev/null  ssh -o GSSAPIAuthentication=no -p "$2" "$1" " bash ${remoteTmpDir}/* ; rm -fr ${remoteTmpDir} "  rm -f $tempFile  return 0else  rm -f $tempFile  echo "connect error:exit"  return 1fi}function SSH_BroadCastExecLocalScripts () {# $1 : sshd port like : 3198# $2 local bash scripts you want the remoteServer to execdeclare ifor i in $glServerListdo  echo "communicating via ssh with $i ... ..."  SSH_RemoteServerExecLocalScripts "$i" "$1" "$2"done  }SSH_BroadCastExecLocalScripts "$1" "$2"

至此,我們的四個工具已經開發完成,接下來請看附錄中的實驗展示。

附錄:

關于實驗環境的配置情況,請查看文章《構建一個完整的DNS系統》,這里不再贅述。

1.控制所有SlaveServer對192.168.31.2主機進行ssh公鑰登錄認證:

2.由于SlaveServer們的sshd參數設置問題,導致ssh登錄連接的建立“異常”緩慢,所以我們需要重新調整所有SlaveServer的sshd配置文件:

3.向所有SlaveServer發送'service sshd reload'命令:

4.命令所有SlaveServer執行本地主機192.168.31.2上的一個腳本:

ip_host.sh
1 #!/bin/bash2 3 declare host_ip=`ifconfig | grep -Eo 'inet addr:/<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))/>' | grep -Eo '/<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))/>' | head -1`4 5 echo "host ip is : $host_ip"6 7 mpstat

至此,我們的工具實驗展示結束。如有問題或建議,歡迎討論 :)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 外汇| 开化县| 侯马市| 朝阳县| 黄石市| 安新县| 万载县| 延长县| 微博| 高碑店市| 松滋市| 湖口县| 即墨市| 孝昌县| 榆树市| 化隆| 陆丰市| 海城市| 小金县| 五台县| 台湾省| 锦州市| 金门县| 永靖县| 阿巴嘎旗| 南陵县| 山东省| 鹤壁市| 湘潭县| 新丰县| 册亨县| 吉隆县| 海阳市| 静海县| 察雅县| 婺源县| 柳州市| 大姚县| 临清市| 元阳县| 邹城市|