대량 scp 스크립트 - 여러 시스템에서 파일 복사

1926 단어 scp
여러 서버에서 로그를 쉽게 얻기 위해 스크립트를 실행하는 기계에 서버 로그를 대량으로 복사하는 데 사용되는 간이 스크립트를 썼습니다.이 스크립트는 2개의 파일 bscp를 포함합니다.sh와 bscp.exp.
사용 방법:
sh bscp.sh username: 대상 기기에 대한 암호입니다.host1,host2: 목표 기계의 IP 또는 기계 이름, 여러 개 사이를 쉼표로 분할합니다.log_file: 대량으로 다운로드할 로그의 절대 경로입니다.
실행 후, 프로그램은 목표 기계의 비밀번호를 입력하라고 알립니다 (여기 여러 기계의 ssh 사용자 이름 비밀번호가 같고, 이전에 ssh 연결을 설정해야 했습니다. yes/no 상호작용을 할 필요가 없습니다)
bscp.sh 주 프로그램:
 
#!/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 스크립트:
 
#!/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: . yes/no 

        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
결과는 세 대의 기계 로그를 실행 스크립트 디렉터리에 다운로드한 것이다
로그 접미사는 기계 이름으로 끝납니다:access.log.host1 access.log.host2 access.log.host3

좋은 웹페이지 즐겨찾기