expect實現自動scp和ssh登錄後執行命令,並向bash提供返回值
阿新 • • 發佈:2017-06-02
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提供返回值