python(pexpect)簡單的自動ssh腳本
安裝python的pexpect子產品
# apt-get install python-pip
# pip install pexpect
# vi ssh.py
按a或i進入編輯模式
#!/usr/bin/python
#/usr/bin/python
import pexpect
child=pexpect.spawn('ssh [email protected]',timeout=5)
ssh_newkey='Are you sure you want to continue connecting'
Down='No route to host'
i=child.expect([ssh_newkey,'password:',pexpect.EOF,pexpect.TIMEOUT,Down]) (下面的0、1、2、3分别對應“[]”裡的序列)
if i == 0:
child.sendline('yes')
child.sendline('123456')
child.sendline('exit')
if i == 1:
if i == 2:
f=open('/log/ssh/ssh.log','a')
f.write('10.0.0.22 ssh(nis) is Bad')
f.write('\n')
f.close()
if i == 3:
f=open('/log/ssh/ssh.log','a')
if i == 4:
f.write('10.0.0.22 ssh(nis) is down')
child.interact()
child.close()
按Esc鍵退出編輯模式
:wq(儲存并退出)
# python ssh.py
腳本解釋:
1、如果第1次連接配接,輸入yes,然後再輸入密碼,如果不是第1次連接配接,輸入密碼
2、EOF表示伺服器(ip)不存在或非linux類,TIMEOUT表連接配接逾時
3、如果如果找不到該伺服器或連接配接逾時,将資訊追加寫入/log/ssh/ssh.log(建議第1台覆寫,後面追加,r為讀,w為寫即覆寫,a為追加)
4、if的下面内容前要縮進一格
再配合bash腳本
# vi mvlog.sh (因為python裡log檔案名是死的,可以借助bash讓其更靈活)
#!/bin/bash
Date=`date +%Y%m%d`
Date2=`date +%Y%m%d -d "1 day ago"`
Date3=`date +%Y%m%d -d "2 day ago"`
Ssh=/log/ssh
if [ -f $Ssh/ssh_$Date2.log ];then
/bin/rm -rf /log/ssh/ssh_$Date3.log
else
/bin/mv /log/ssh/ssh.log /log/ssh/ssh_$Date2.log
/usr/bin/touch /log/ssh/ssh.log
fi
:wq
# vi ssh.sh(這個主要根據log檔案内容及更新時間判斷有伺服器報警并發郵件通知)
Date=`date +%H:%M`
Hour=`date +%H`
Hourr=`date +%M`
Size=`/bin/ls -l /log/ssh/ | grep ssh.log | awk -F[:" "]+ '{print $5}'`
Hour2=`/bin/ls -l /log/ssh/ | grep ssh.log | awk -F[:" "]+ '{print $8}'`
Hour22=`/bin/ls -l /log/ssh/ | grep ssh.log | awk -F[:" "]+ '{print $9}'`
if [ $Size -ge "4" ] && [ $Hour = "$Hour2" ] && [ $Hourr = "$Hour22" ]
then
/bin/echo "time $Date" >> /log/ssh/ssh.log
/usr/bin/mail -s "Android ssh(nis) is bad at $Date" [email protected] < /log/ssh/ssh.log
/usr/bin/mail -s "Android ssh(nis) is bad" [email protected] < /log/ssh/ssh.log
本文轉自linux部落格51CTO部落格,原文連結http://blog.51cto.com/yangzhiming/1677036如需轉載請自行聯系原作者
yangzhimingg