SSH非交互式密碼授權遠程執行腳本


公司有上百台服務器,需要為每台服務器都執行一個腳本,因為所有服務器的賬號密碼都是一樣的,所以可以不用搭建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自動添加到已知主機文件中,來避免該問題。

本文永久更新鏈接地址http://www.linuxidc.com/Linux/2017-04/143180.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM