歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

批量scp腳本——從多台機器拷貝文件

批量scp腳本——從多台機器拷貝文件   為了方便的從多台服務器獲取日志,寫了個簡易腳本專門用於批量拷貝服務器日志到執行腳本的機器中。該腳本包含2個文件bscp.sh和bscp.exp。   使用方式:   sh bscp.sh <username> <host1,host2> <log_file> username:你ssh到目標機器的密碼。 host1,host2:目標機器的ip或者機器名,多個之間用逗號分割。 log_file:你要批量下載的日志的絕對路徑。   運行後,程序提示輸入目標機器的密碼(這裡需要多台機器的ssh用戶名密碼是相同的)   bscp.sh主程序:   [plain]  #!/bin/bash   if [ $# != 3 ]    ;then       echo "usage:<username> <host1,host2> <log_file>"       exit 1   fi   stty -echo               #隱藏密碼輸出   read -p "Please enter target hosts' passwd of $1:" passwd   stty echo   echo      dirpath=`dirname $0`   #echo $dirpath   $dirpath/bscp.exp $1 $2 $3 $passwd     expect腳本: [plain]  #!/usr/bin/expect -f   set user [lindex $argv 0]   set hosts [lindex $argv 1]   set logfile [lindex $argv 2]   set passwd [lindex $argv 3]   set timeout 10   set hostlist [split $hosts ","]             # 把host字符串分割成列表      set slashIdx [expr [string last / $logfile] + 1]    set filename [string range $logfile $slashIdx end]  # 獲取日志文件名      foreach h $hostlist {       set hostfile $filename       spawn scp $user@$h:$logfile ./$filename.$h       expect "*Enter passphrase for key*" {   # 這裡可以改成其他可能出現的顯示文字,如password:等.或者加多交互環節           send  "$passwd\r"           send  "\r"       }       expect "*%*" {set timeout -1 ; puts "\rtrasmitting..."}       expect eof {                            # 下載完成後輸出成功信息           puts "\rtransmit successfully!"           set timeout 10       }   }     一個栗子:   執行獲取3台機日志: ./bscp.sh ultrani host1,host2,host3 /home/admin/xxx/logs/access.log   結果是把3台機器的日志下載到執行腳本的目錄中   日志後綴以機器名結尾: access.log.host1 access.log.host2 access.log.host3
 
Copyright © Linux教程網 All Rights Reserved