马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
使用expect实现远程ssh命令执行和scp拷贝文件
$ i) T9 R8 W- j# P3 Sfunction ssh_exec () {
/ w: p v4 p/ r0 B8 U& Q& V local ip=$1) [; t8 E0 h; e6 U& m
local passwd=$2
8 A6 V6 G$ u) U& W local cmd=$3! Y0 f% `- b4 D7 ~( M
[ -z "$ip" -o -z "$passwd" -o -z "$cmd" ] && return 1, t/ w5 z) J, ?, W' M+ S& }
/usr/bin/expect << EOF; K7 x0 ?6 d) T) N
proc remote_exec {ip passwd cmd} {
. ^% B K5 G8 a" |+ Q spawn ssh [url=]root@\$ip[/url]
. ]/ {% ]" j( w0 v) |; j exp_internal 0
4 F, F8 h. U. h4 ~ expect {
9 N6 Y; A; `# _* C l) q) a) m "yes/no" { send "yes\\r";exp_continue}
c* G! K- F8 k% ?+ R& Y* K, ]6 ? "*password:" {send "\$passwd\\r"}
0 c1 J" F" I/ G( h1 a( y8 l* t. l }
* T( Y# f$ Z- S6 N expect "*#"
* ^9 ?' ]5 s2 M8 K1 [ send "\$cmd\\r"; Y% M1 N/ T! O6 S! N) O8 Y# r; n
expect "*#"% g9 L% Z% g: S, x0 Y+ g5 Y
send "exit"9 w* Y: P+ U' f* d% J9 U: K& `
close$ b! ?; m5 q9 `" K9 v# t
}9 \3 m' b0 U/ c% l9 d e* N1 r! E
) B4 s8 L% P! n( ?( v remote_exec "$ip" "$passwd" "$cmd"
8 ^1 @) n+ o! |$ o2 MEOF( G, i- M. g$ ?5 n' r/ e# z P6 v
}
, m8 O- t7 D3 ?* c% c
6 K8 @% {' {5 F8 V |function scp_get () {
2 V5 x1 ]4 u7 Q local ip=$1$ K0 R2 _/ ?" M3 x, R" a0 o v+ J
local passwd=$2! O1 v% F9 W1 R" e
local src=$37 t9 K6 T& Z% T8 Y r" F
local dst=$4! F) ]0 D) T1 `+ b
* p; l2 c" e6 R9 A8 q/ ], @% |( M [ -z "$ip" -o -z "$passwd" ] && return 1
% g% ]* u, {$ p5 r /usr/bin/expect << EOF8 F5 T9 K2 V& `4 k1 ]! m; y5 ^( M
proc remote_exec {ip passwd src dst} {
+ ^1 b7 a3 t4 x( X7 p( i spawn scp [url=]root@\$ip:\$src[/url] \$dst1 Y8 q; v, J8 K: p
exp_internal 04 f( Y: A ?$ R! X9 W ~# ?* a8 o
expect {
: V- { T) f! `, N "yes/no" { send "yes\\r";exp_continue}9 H: P. N ^: ]' L6 R
"*password:" {send "\$passwd\\r"}
3 F/ V( r, ~4 a$ k3 Z$ G }
) @5 X/ Z9 K& h expect eof K, a: e: B% C& `
}
4 F2 `9 m) F% I: G, z! ]& k) m 1 g+ e- m+ b$ k9 B( K! G
remote_exec "$ip" "$passwd" "$src" "$dst"2 z; T( d. ^+ G' \& N
EOF
# u8 E9 b9 O5 z2 l2 ?# ?}
3 x; `- K( C9 q6 x2 W$ x' y
|