公司有上百台服務器,需要為每台服務器都執行一個腳本,因為所有服務器的賬號密碼都是一樣的,所以可以不用搭建ansible等自動化運維工具,我們直接通過SSH遠程執行即可完成。
本文以三台服務器為例,系統版本:CentOS7.3
1、安裝sshpass
cd /etc/yum.repos.d/
wget http://download.openSUSE.org/repositories/home:Strahlex/CentOS_CentOS-6/home:Strahlex.repo
yum install -y sshpass
2、新建IP地址列表文件
cd /usr/local/sbin
vim iplist.txt
192.168.19.142
192.168.19.143
3、編寫腳本
腳本思路:先拷貝需要遠程執行的腳本文件到各遠程服務器上,然后通過ssh遠程執行腳本。
vim command.sh
#! /bin/bash
pw=`pwd`
dest_user=root
dest_pwd=Admin123
dest_path=/usr/local/sbin
script_name=cmd.sh
chmod +x $pw/$script_name
[ ! -f $pw/scpssh.log ] && touch $pw/scpssh.log
echo begin > $pw/scpssh.log
for ip in `cat $pw/iplist.txt`
do
sshpass -p $dest_pwd scp -P22 -o StrictHostKeyChecking=no $pw/$script_name $dest_user@$ip:$dest_path
if [ $? = 0 ]
then
echo $ip scp success |tee -a $pw/scpssh.log
else
echo $ip scp failed |tee -a $pw/scpssh.log
echo >> $pw/scpssh.log
fi
sshpass -p $dest_pwd ssh -P22 -o StrictHostKeyChecking=no $dest_user@$ip $dest_path/$script_name
if [ $? = 0 ]
then
echo $ip ssh success |tee -a $pw/scpssh.log
else
echo $ip ssh failed |tee -a $pw/scpssh.log
echo >> $pw/scpssh.log
fi
done
echo End! >> $pw/scpssh.log
說明:dest_path為遠程機器的路徑,script_name為需要遠程執行的腳本名稱。
賦予執行權限
chmod +x command.sh
4、執行腳本
把需要遠程執行的腳本cmd.sh放在/usr/local/sbin/目錄中,該遠程腳本只是在遠程服務器/usr/local/sbin/目錄下創建一個文件夾。
cat cmd.sh
#! /bin/bash
cd /usr/local/sbin
pw=`pwd`
mkdir $pw/test
目錄結構
執行腳本
sh command.sh
注意:第一次執行會提示如下警告,是因為讓ssh自動添加到已知主機文件中的提示,可忽略
Warning: Permanently added '192.168.19.142' (ECDSA) to the list of known hosts.
5、查看結果
在當前目錄下會產生日志文件 scpssh.log
並在遠程服務器上可查看到生成了test文檔
注意:提示 Host key verification failed ,避免該問題可以在ssh或scp的時候通過-o選擇加參數數 StrictHostKeyChecking=no,讓ssh自動添加到已知主機文件中,來避免該問題。