shell脚本抓取远程日志的实例代码

发布时间:2020-03-09编辑:脚本学堂
分享一个可以抓取远程日志的shell脚本,自动发送密码到远程机器,并获取远程日志文件,主要用到了expect,需要的朋友参考下。

如果你有多台机器需要维护,需要分析多台服务器日志文件,那么最好的一个办法,就是将这些日志文件集中在一起,然后合并,以方便日志分析

linux系统中,可以scp每台机器上的日志文件到本地,但每台SCP都要求输入密码,操作较繁琐。

于是便写了一个自动抓取远程日志的脚本,实现了基本功能,用于从远程机器上抓取日志文件,用起来也方便。

例子,shell/ target=_blank class=infotextkey>shell脚本的完整代码:
 

复制代码 代码示例:
#!/usr/bin/expect -f
# 自动发送密码抓取远程日志
# 整理:www.jb200.com
#
if { $argc !=1 &&  $argc !=2  } {
send_user "没有输入远程日志文件名.n"
send_user "格式是:get.sh ${remote_log} ${local_log}n"
send_user "例如:n"
send_user "./get.sh /home/admin/log/gc.log /tmp/gc.logn"
send_user "local_log没有输入,默认是值:/logs/log.txtn"
exit
}
set log_path [lindex $argv 0]
if { $argc == 2 } {
    set local_logpath [lindex $argv 1]
} else {
    set local_logpath "./logs/log.txt"
send_user "local_log没有输入,默认是本地日志路径 :$local_logpath n"
}
set file "./ip.txt"
if {[file isfile $file]!=1} {
    send_user "Ip 文件不存在,请检查.n"
    exit
}
send_user "nnn"
set f [open $file r]
set count 0
while {[gets $f line]>=0} {
set ips($count) $line
#puts "line $count of file: $ips($count)"
incr count
}
close $f
set i 0
while {$i<50} {
#puts $ips($i)
spawn scp nobody@$ips($i):$log_path  $local_logpath.$ips($i)   
expect "nobody@$ips($i)'s password: " {send "lookr"}
expect eof
incr i
}
exit