歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 批量scp腳本——從多台機器拷貝文件

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

日期:2017/3/1 16:22:02   编辑:關於Linux
批量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