1. 程式人生 > >expect實現自動scp和ssh登錄後執行命令,並向bash提供返回值

expect實現自動scp和ssh登錄後執行命令,並向bash提供返回值

ip地址 用戶名 expect 密碼

#!/bin/bash
# 全局變量:用戶名,普通用戶密碼,root密碼
loginname="xxxx"
userpwd="xxxx"
rootpwd="xxxx"

# 讀取iplist(逐行存儲IP地址)
cat /root/iplist | while read line
do
ip=($line)

# scp腳本及ssh登錄執行
/usr/bin/expect<<EOF
set timeout 10
spawn scp /root/check_and_fix.sh $loginname@$ip:/home/xxxx
expect {
        "*yes/no" {send "yes\r";exp_continue}
        "*password:" {
                send "$userpwd\r"
        expect eof
                }
        }
spawn ssh $ip -l $loginname -p 22
expect {
        "*yes/no" {send "yes\r";exp_continue}
        "*password:" {
                send "$userpwd\r"
                expect "~]$"
                send "su -\r"
                expect "*assword:"
                send "$rootpwd\r"
                expect "~]#"
                send "md5sum /home/xxx/check_and_fix.sh\r"
                expect {
# a4e3eb6a16f78129cf78d67d1c737ce9為上述文件正確的md5值,若正確則執行該腳本
                    "a4e3eb6a16f78129cf78d67d1c737ce9" { send "/home/xxxx/check_and_fix.sh\r"}
                }
                expect {
                    "存在漏洞並已修復" { exit 0 }
# "存在漏洞並已修復"為腳本執行輸出結果,匹配後退出expect並向bash提供返回值0
                }
                expect eof
                exit 1    # 若md5值不正確,則匹配上一條expect eof後匹配exit 1,退出expect並向bash返回1
        }
}
EOF

# 記錄修復日誌
if [ $? -eq 0 ]
then
        echo "$ip 漏洞修復完成" >> /var/log/patch.log
else
        echo "$ip 漏洞修復失敗" >> /var/log/patch.log
fi
done


本文出自 “機智少年普朗克” 博客,請務必保留此出處http://armolee.blog.51cto.com/6288560/1931561

expect實現自動scp和ssh登錄後執行命令,並向bash提供返回值