自动远程拷贝expect脚本

    xiaoxiao2023-03-24  5

    转自

    http://www.75271.com/1266.html

    自动远程拷贝expect脚本

    expect自动远程拷贝脚本,利用rsync命令,脚本内容如下:

    #!/usr/bin/expect -- proc Usage_Exit {self} { puts "" puts "Usage: $self ip user passwd port sourcefile destdir direction bwlimit timeout" puts "" puts " sourcefile: a file or directory to be transferred" puts " 需要拷贝目录时目录名后不要带 /, 否则会拷贝该目录下的所有文件" puts " destdir: the location that the sourcefile to be put into" puts " direction: pull or push" puts " pull: remote -> local" puts " push: local -> remote" puts " bwlimit: bandwidth limit, kbit/s, 0 means no limit" puts " timeout: timeout of expect, s, -1 means no timeout" puts "" exit 1} if { [llength $argv] 0 } { spawn rsync -crazP --bwlimit=$bwlimit -e "/usr/bin/ssh -q -l$user -p$port" $ip:$sourcefile $destdir } elseif { $bwlimit == 0 } { spawn rsync -crazP -e "/usr/bin/ssh -q -l$user -p$port" $ip:$sourcefile $destdir } else { Usage_Exit $argv0 } } elseif { $direction == "push" } {  if { $bwlimit > 0 } { spawn rsync -crazP --bwlimit=$bwlimit -e "/usr/bin/ssh -q -l$user -p$port" $sourcefile $ip:$destdir } elseif { $bwlimit == 0 } { spawn rsync -crazP -e "/usr/bin/ssh -q -l$user -p$port" $sourcefile $ip:$destdir } else { Usage_Exit $argv0 } } else { Usage_Exit $argv0} expect {  "assword:" { send "$passwd\r" break; }  "yes/no)?" { set yesnoflag 1 send "yes\r" break; }  "FATAL" { puts "\nCONNECTERROR: $ip occur FATAL ERROR!!!\n" exit 1 }  timeout { puts "\nCONNECTERROR: $ip Logon timeout!!!\n" exit 1 }  "No route to host" { puts "\nCONNECTERROR: $ip No route to host!!!\n" exit 1 }  "Connection Refused" { puts "\nCONNECTERROR: $ip Connection Refused!!!\n" exit 1 }  "Connection refused" { puts "\nCONNECTERROR: $ip Connection Refused!!!\n" exit 1 }  "Host key verification failed" { puts "\nCONNECTERROR: $ip Host key verification failed!!!\n" exit 1 }  "Illegal host key" { puts "\nCONNECTERROR: $ip Illegal host key!!!\n" exit 1 }  "Connection Timed Out" { puts "\nCONNECTERROR: $ip Logon timeout!!!\n" exit 1 }  "Interrupted system call" { puts "\n$ip Interrupted system call!!!\n" }} } if { $yesnoflag == 1 } { expect { "assword:" { send "$passwd\r" }  "yes/no)?" { set yesnoflag 2 send "yes\r" } }} if { $yesnoflag == 2 } { expect { "assword:" { send "$passwd\r" } }} expect { "assword:" { send "$passwd\r" puts "\nPASSWORDERROR: $ip Password error!!!\n" exit 1 }  eof { puts "OK_SCP: $ip\n" exit 0; }}

    用法:

    ./scp.exp Usage: ./scp.exp ip user passwd port sourcefile destdir direction bwlimit timeout  sourcefile: a file or directory to be transferred 需要拷贝目录时目录名后不要带 /, 否则会拷贝该目录下的所有文件 destdir: the location that the sourcefile to be put into direction: pull or push pull: remote -> local push: local -> remote bwlimit: bandwidth limit, kbit/s, 0 means no limit timeout: timeout of expect, s, -1 means no timeout
    转载请注明原文地址: https://ju.6miu.com/read-1202646.html
    最新回复(0)