|
使用expect实现远程ssh命令执行和scp拷贝文件
+ V4 l A' O, f8 Sfunction ssh_exec () {
( [; t3 Y: B: L$ x( @ local ip=$11 V3 d9 L* |- |* A/ D# U
local passwd=$2/ z, R% j( u) w$ B( ~; D1 V
local cmd=$3- U* S3 e( \* l/ X; Q0 B
[ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1
* B# k9 k* v) P2 i' H /usr/bin/expect << EOF. u1 Q) P9 H- f- h+ Y2 m( t& M! J! l6 D
proc remote_exec {ip passwd cmd} {
" m2 Q9 Y* Q# p5 \ spawn ssh [url=]root@\$ip[/url]$ A- x9 E' `2 q( H5 b( g
exp_internal 02 L' n5 E$ H( r4 V* O+ ]4 j- L4 u
expect {
3 a9 `- T0 p0 \$ w9 t "yes/no" { send "yes\\r";exp_continue}
% Q/ o/ e8 K/ U0 _) C. E8 { "*password:" {send "\$passwd\\r"}
p; }. c4 H- {& \ }
( c. v8 v: g* P% ]% }6 v5 w2 S expect "*#"# n/ B% \& m6 u/ t) p/ k: X G. v
send "\$cmd\\r"
% O0 f% r0 E% J+ I' T expect "*#"
2 x T9 y% M6 @4 |5 N send "exit"* Y' j3 z7 D0 B" \
close& g) t! ]+ x2 `; n- R2 P9 d6 O' n
}- b/ ?4 d5 v6 R$ N' H# S) ]( U7 I
, {. |5 V" o- ~* c remote_exec "$ip" "$passwd" "$cmd"! { H( d6 F) u$ m
EOF
6 o4 s5 v" C* ]1 N}& X) F* h4 p% a* l/ G- h* b
) f; ^: z+ c0 c9 q& [$ ]
function scp_get () {- x1 d7 ]. h4 z/ z: F
local ip=$1( a9 g1 ?4 E+ @) {# J. w
local passwd=$2% B- _3 [- I- ^- o
local src=$3
; {7 u1 i1 |5 e9 Y3 D- Y4 ^- J local dst=$4' c( p0 W! V, j2 w- X
; ~3 M2 Z# a A+ o [ -z "$ip" -o -z "$passwd" ] && return 1
( Q' _2 W' D3 j2 ? /usr/bin/expect << EOF% E" `: n& |# n7 z- D3 ^# k
proc remote_exec {ip passwd src dst} {2 N$ U' V# R& n( f0 z2 r
spawn scp [url=]root@\$ip:\$src[/url] \$dst
- i2 z b1 g3 @# v exp_internal 0
5 N) k; c% z8 u( H expect {% }3 W V) k7 p+ D# S* S1 s, H/ }+ U
"yes/no" { send "yes\\r";exp_continue}4 X' r q+ @& k( k' E' [. Z! A) K
"*password:" {send "\$passwd\\r"}& z! s2 N+ G2 v- d2 a" X% m
}$ ^! @+ ~0 @: L" D
expect eof1 q* o# Z( ?' I- {% P1 i
}
. {7 k0 g% k( x
& f4 f3 b7 `0 C2 r5 i5 q remote_exec "$ip" "$passwd" "$src" "$dst"9 ?) j3 K/ d4 I' _
EOF4 m$ y8 Y3 g$ f, ?
}! J7 {7 T0 O# G0 Z; Q# T
|