天天看點

python(pexpect)自動ssh腳本

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