|
使用expect实现远程ssh命令执行和scp拷贝文件
7 j. ], K1 D+ a' q2 n8 ]5 z; kfunction ssh_exec () {
9 f7 c1 b0 V3 `% r7 s1 n& q local ip=$1
. t+ [" W. [5 y" J local passwd=$2
2 A6 X/ a, b3 _. ^+ p local cmd=$3) z8 A7 E5 ?1 r4 ^: M( y
[ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1
6 V! j# }! d/ a4 w" Y /usr/bin/expect << EOF2 O8 j5 N G1 [7 ?/ Z+ C
proc remote_exec {ip passwd cmd} {
( s1 u+ b9 A5 S8 S! D spawn ssh [url=]root@\$ip[/url]
$ q' i" y9 k: g* h. _ exp_internal 0% B( d6 u& v1 Y! j
expect {
O, l* }& i2 B0 A# s! V8 r "yes/no" { send "yes\\r";exp_continue}
% j) L6 N5 a2 V3 j "*password:" {send "\$passwd\\r"}. d" \5 X1 d0 \0 _
}
( N$ M; _6 N8 ]. A; e# r+ y6 M expect "*#"
% S9 A( E2 r, f4 ? send "\$cmd\\r") X; x$ C' v' F
expect "*#"
1 T! k; k/ P! ~: [ send "exit"
: b8 k3 L& W9 g7 D( E close
. u0 t7 r5 ^$ O! o) Q. G. k }
: Y- x N* E- v$ g6 A* g* X 6 v. I A, d3 W% d
remote_exec "$ip" "$passwd" "$cmd"" I- A8 y h0 i
EOF0 b: p$ ]) a9 @; x1 P8 J
}
. X, {1 |8 c) g: L, _ }9 N, u ) V+ F+ F; B, g* N, e! V: L7 O) F
function scp_get () {- J& ~2 v" r3 l$ X& `; o; q4 p
local ip=$12 k* D4 E8 C% ?+ k$ I3 f
local passwd=$2
: d& F. P& f0 E) A3 C. E9 W local src=$3- J( L" O/ F" w0 Q) A# A
local dst=$4
( X$ f/ D$ h' a1 X3 W) @( V
" j# B7 D7 F, _+ a; }3 E: W [ -z "$ip" -o -z "$passwd" ] && return 1# Y' _7 g$ f, x N& r: J' |
/usr/bin/expect << EOF5 P: @, S6 H5 ?# a* P, {7 O
proc remote_exec {ip passwd src dst} {
- F- q% b/ C1 b spawn scp [url=]root@\$ip:\$src[/url] \$dst
) `! f6 ]" T( ~6 e5 M6 q/ |1 w exp_internal 01 F% Z- e5 v2 P6 } i: B
expect {/ i0 b& B* G- R( w" u4 P3 f
"yes/no" { send "yes\\r";exp_continue}- b+ F2 U! h& h9 }* W
"*password:" {send "\$passwd\\r"}+ N3 j8 w- S+ [
}
) |6 t% b; n6 E3 c expect eof1 M, `/ x2 F3 k0 f" a0 ^
}
8 \( j4 g+ a! Y/ c
7 p. X+ ?6 v6 b7 k remote_exec "$ip" "$passwd" "$src" "$dst"4 T* Q/ E# B8 o6 n" y
EOF
0 L6 b* C( _$ x9 t& [4 J3 |}
+ i$ q$ t; `0 [9 g9 S
|