|
使用expect实现远程ssh命令执行和scp拷贝文件
9 P' ~ P/ e3 K# Afunction ssh_exec () {4 t9 K2 v& I+ r+ T
local ip=$1
6 o" C0 C5 ~* v' E4 l: {! F local passwd=$2
' e2 }# D; Z5 E local cmd=$3
3 e8 y m4 u. ?, e/ }5 U5 @- e% X- f: A [ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1
: r1 v! h1 L& a) n% V* c4 B0 I /usr/bin/expect << EOF& f7 c7 l, T% d3 D) d9 N. ?
proc remote_exec {ip passwd cmd} {
. {3 C8 d# V R% D: w) |' j# z spawn ssh [url=]root@\$ip[/url]
! I6 d; D7 E* X' p! N$ R& ]) w exp_internal 0
3 |* }" L% s8 p. j6 \: r6 ~4 P Y, d expect {! v1 @+ I# C& |# ?8 a
"yes/no" { send "yes\\r";exp_continue}
' b% J, c+ Y& D "*password:" {send "\$passwd\\r"}" `3 B0 p U5 v8 V. I
}
( A& i+ }9 x& P$ R2 V expect "*#"
+ m' d) K" L: w0 U$ k0 |5 F& L send "\$cmd\\r"
$ p" j, h: e+ m( D s5 z expect "*#"
5 F( D( W1 }3 |8 L send "exit"- h* t1 j' w: ~: X
close
! S2 |& L& M% f( {7 G }# d+ f* E- l% |7 E& C
1 q$ O( ~6 o7 ~8 o- h. @1 f& X; @
remote_exec "$ip" "$passwd" "$cmd"
2 q' t+ I+ d7 \! J6 D, \9 dEOF. R0 R0 x: {$ d, I! Q
}' d/ ~0 t' [- ?4 `, Z
P3 W0 J1 ?" K
function scp_get () {( l+ \5 [( @# g- ~3 h( R* {& L% v
local ip=$1- _, I8 D7 ]4 E9 }* G5 ?5 {
local passwd=$2& p4 V( s6 X8 V, B. v; C
local src=$3
) {( C8 o h; e local dst=$45 S/ v; g' F/ Y9 Q9 Y$ Y
. r& e2 o, G2 X [ -z "$ip" -o -z "$passwd" ] && return 1
. I0 [4 @& Y: d$ `; @3 s /usr/bin/expect << EOF
% Q( ?& C7 ]3 T: J/ P0 b% Z8 @ proc remote_exec {ip passwd src dst} {
; Q' E4 a5 n1 W2 w6 E0 F4 i spawn scp [url=]root@\$ip:\$src[/url] \$dst
1 f$ |0 z) q( k exp_internal 0& N4 \# ?! j# b8 H( p; I" d# f' N
expect {
# j4 d' r' | A "yes/no" { send "yes\\r";exp_continue}
8 u0 f; B, f+ r "*password:" {send "\$passwd\\r"}
) P1 R. T% G' s) @6 t }& [! Z, O, r; [- I$ D
expect eof
4 w! W. h1 @; p- Z; e9 E }
* B9 X. \$ D0 O0 m
, ]4 G7 u3 z* G _8 b9 @; ? remote_exec "$ip" "$passwd" "$src" "$dst"# G. U3 ~- q6 [! {, k+ u
EOF
z+ E" w. Y& [) r \# N$ E}
1 I( K! U1 w( f
|