引言
如果需要在大量的伺服器執行相同的操作,或者是部署分布式應用(elk, k8s, geth等)時,一般的做法是寫乙個批量操作的本地指令碼,依次scp到每一台伺服器上,然後ssh到每一台伺服器上執行指令碼。但如果有上幾十台甚至上百臺機器呢,或是剛寫完乙個指令碼發下有缺陷,又需要重複的做scp、ssh的工作,在此來說一下我自己批量操作伺服器時使用的方法,如果有更好的方法,歡迎指導交流。
一、建立ssh信任關係
由於需要執行ssh和scp命令,必然要涉及到輸入伺服器密碼的操作,或者有的伺服器設定中禁用了輸入密碼的方式登入。雖然可以使用expect指令碼來輸入密碼,但是由於他的實現原理,用一下就知道有多麼的操蛋。此時,建立信任關係成了最方便的方法。之前建立好信任關係的可以跳過此章。
ssh-keygen -t rsa
然後檢視已經生成的公鑰
vim ~/.ssh/id_rsa.pub
把該檔案的內容追加到伺服器的信任列表中,如果沒有這個檔案就自行建立
vim /root/.ssh/authorized_keys
好了,接下來我們就可以自由的scp和ssh了。
二、編寫伺服器需要執行的指令碼
假設我們想檢視每一台伺服器的磁碟使用情況
cd /tmp
echo df > df.sh
三、編寫批量操作指令碼
cat > /tmp/sshall.sh << eof
#!/bin/bash
#server list
iplist=(
103.235.247.111
101.207.224.222
107.155.29.111
107.155.2.222
)function fun
for ip in $
do fun $ip
echo _____
done
eofchmod 777 sshall.sh
四、執行
./sshall.sh
結果:
tmpfs 6540056 0 6540056 0% /run/user/1001
_____
tmpfs 6540872 0 6540872 0% /run/user/1000
_____
tmpfs 6587832 0 6587832 0% /run/user/0
_____
tmpfs 388176 0 388176 0% /run/user/0
_____
五、總結
本文沒有什麼技術含量,只在分享一種方法,原理就是建立信任關係後利用scp遠端拷貝檔案和ssh遠端執行命令。在實際操作中會用更靈活的應用方式。
當然,如果伺服器數量不多,也可以使用terminator終端的分屏功能來實現操作,效果如下
dsh批量管理linux伺服器
一,安裝dsh wget tar zxvf libdshconfig 0.20.9.tar.gz cd libdshconfig 0.20.9 configure make make install wget tar zxvf dsh 0.25.9.tar.gz cd dsh 0.25.9 conf...
ubuntu下apache伺服器操作方法小結
linux系統為ubuntu 一 sta程式設計客棧rt apache 2 server 啟動apache服務 etc init.d apache2 start or sudo etc init.d apache2 start 二 restart apache 2 server 重啟apache服務...
Linux下CVS伺服器
2.在 etc xinetd.d下面建立乙個檔案cvspserver,其內容如下 service cvspserver 其中cvs命令在 usr bin目錄下,而設定cvs工作根目錄是 cvs。3.重新啟動xinetd超級伺服器,使用下面命令 etc init.d xinetd restart 4....