|
|
楼主 |
发表于 2017-12-22 17:12:25
|
显示全部楼层
echo | ssh -l root passwd --stdin
M- o5 N, p" i" `( U8 hecho "newpass" | ssh -l root 10.11.103.151 passwd --stdin dewang
/ A9 O1 ^; F/ w# D) u3 O6 S" }root@10.11.103.151's password: 0 g1 W, N. {( t8 K8 P3 X
Changing password for user dewang.7 P( d" U5 g3 f6 j' `+ \
passwd: all authentication tokens updated successfully.0 R* `, R; p w4 b0 p) C6 _
/ f! u( \$ V3 Z% G; p% w6 [5 \; Q% U" F! L3 `; k+ Q6 w' m2 @
#!/usr/bin/expect1 O1 B1 W' e- b5 h0 \
#@brief to change user password by ssh remote machine4 _: |. w+ j; ]- s# P
$ w8 }! a3 m% b+ \: s! G; s; f% kproc usage {funcname} { K' l1 {3 Z3 ]% N
puts "Usage: "
( d2 f4 D( d2 U1 D* F puts " $funcname -user "
9 ?9 T4 O0 r- Y2 B! u) S puts " $funcname -root "! Q6 \0 X% E3 m. t% m' N. Q
} " S8 ?" g. c; w$ K# Z5 Q
) y Y$ Q, J; Q& e
# check param
# u+ \0 s, j E) ?7 f% a$ ]. oif { $argc != 5 } {+ C' u$ _! u7 ^
usage $argv0 1 U3 B3 }# f- i! g6 f
exit 1+ p2 r/ \% U5 k3 [
}) D- { g) K: `
4 s9 l4 K n* B5 L
# get param
I! d7 X9 ~2 U* Y; M: hset host [lindex $argv 0]
6 T4 w. j/ M1 Y& w$ @) `set username [lindex $argv 1]& x! _" F. p0 h2 Z
set newpasswd [lindex $argv 2]
[, v S Y% yset loginname "root"8 Z# r; c- M5 b! K* r6 X
if { [string compare [lindex $argv 3] "-user"] == 0 } {
! q4 ^' C/ Y. C# J6 x, Y7 ?, \: | set loginname $username
% B2 Q6 { f+ m/ f}2 v7 u) M8 O8 y" V/ P |
set passwd [lindex $argv 4]
! P3 C, T0 `2 v1 y- R, ~puts "$host $username $newpasswd $loginname $passwd"
0 Q1 S4 C1 N$ n+ c1 B# l! L6 u6 V9 c9 Y7 X, R; G
spawn ssh -l $loginname $host
9 U1 K* E/ E' e! u4 X/ {5 ]expect {/ ^/ `8 l. [$ b H8 v
"*(yes/no)*" { send "yes\r"; set sshkey 1 }
* X7 j n- p$ W9 D n"*assword:*" { send "$passwd\r"; set sshkey 0 }/ I1 _! z- _8 G- ^
if sshkey == 1 {7 f8 {( k/ S; K+ `- c3 p0 z: ]2 y9 }) |
expect "*password:*"
! N. m& g8 a% u8 z; n9 f) ` send "$passwd\r"$ t d& h/ H- m0 e: Y* m& J# ?
}
+ a; d2 l9 p4 ` s0 p$ ]1 K1 o}1 S4 R/ v- A- y! K& F
expect "*#"
/ S1 J. V! _+ B, s7 Z$ ^
# {: x: S7 j) m. ~2 lif { [string compare $loginname "root"] == 0 } {
7 ^) @, {7 J- M) [* x( P5 X& W- x0 Y3 } #send "echo \"$username:$newpasswd\" | chpasswd\r": ^* o; w) J) s7 e( N5 u
send "echo \"$newpasswd\" | passwd --stdin \"$username\"\r". i9 j# X) L) |. a
} else {
0 ^# \+ D r7 [ send "passwd\r"$ o' q( q( X+ A: ]7 X
expect {
; h; X" e1 A$ O1 ~% A S4 b" G* \# C* H "*current*assword:" {send "$passwd\r"}
$ f$ @ K; R# q7 k' I "passwd: Authentication token manipulation error" {exit} v0 j: `+ a; L3 w. T: w# `
}
i- f% O* Q; U$ w4 O# _2 U expect "New*assword:"
" Q/ `! a# e- _9 K5 K1 Z1 v send "$newpasswd\r"
D' P3 \$ R9 l) s4 |( |% T expect "Retype*assword:", M6 _" z M- b3 q; s
send "$newpasswd\r" e7 m4 v( s3 A3 a
}
# {, {6 `: D* oexpect "*#"
2 G8 k i5 t6 ~' y# j3 Ysend "exit\r"( C M. C7 U5 {9 _& }
#interact 是否将交互权接过来,如果接过来,则用户这时可进行交互操作 |
|