|
|
楼主 |
发表于 2017-12-22 17:12:25
|
显示全部楼层
echo | ssh -l root passwd --stdin
8 g6 l8 e: k7 j0 P7 becho "newpass" | ssh -l root 10.11.103.151 passwd --stdin dewang/ t0 w x9 [& ?6 |7 L
root@10.11.103.151's password: 0 B% @* w4 W# V0 a7 G
Changing password for user dewang.
4 c1 g3 e# C Y, _& \; j" @passwd: all authentication tokens updated successfully.
; ~6 _3 v! I3 {
3 G- B) R6 ] R8 ]* q5 W) c+ n, y! W) V5 Q& @
#!/usr/bin/expect' M! x) i: p; l! Q% Q N
#@brief to change user password by ssh remote machine9 @; g9 Z4 F5 l, M- A& d2 z" U2 V
; J. a8 A, n( iproc usage {funcname} {
# m. Q L- f9 y& l6 t+ J4 c% ^8 ` puts "Usage: "
2 E3 \$ N( x# a+ b puts " $funcname -user "
/ J, i" A ]- Q puts " $funcname -root "- w% o4 {2 q9 V& Q. W% v
} 8 `2 m8 o5 X+ h0 n0 M# A% p
( m O$ u" _- V/ d. O# |2 k0 {- z4 h
# check param& D; r# Q1 y$ D
if { $argc != 5 } {
4 ?, @0 |+ e2 ~3 X usage $argv0 3 [5 R1 t9 R' @- k
exit 1
o; v1 [2 T1 |}
4 P: ?2 ]3 ]) f, x) Y4 q9 u* L0 Q5 G+ F3 f1 l
# get param
# a9 B. B, [2 X4 `# Z* s2 T5 Fset host [lindex $argv 0]
' {9 U0 T7 Q& cset username [lindex $argv 1]
) A" ]& W& x* H) h/ K. N/ Qset newpasswd [lindex $argv 2]1 S) E: Y( U/ p/ V }/ Y$ F+ Q
set loginname "root" c) i$ l) k1 b* N7 _4 a' |
if { [string compare [lindex $argv 3] "-user"] == 0 } {
9 r5 p) v4 e$ }" _5 y5 ] set loginname $username. \* g) ?/ t6 W" L8 n, \/ s: L* h- B
}
g) u# [7 V4 A/ e9 I5 |9 uset passwd [lindex $argv 4]0 h! Q$ H2 a! \8 ^' w
puts "$host $username $newpasswd $loginname $passwd"
! M2 d0 R7 w/ z( S
?4 {* n6 b8 G! r% Z3 Yspawn ssh -l $loginname $host' F. J& p8 z. e3 j- |" ^4 Q$ Z% f
expect {* M# J* A' i- S1 f% c0 z
"*(yes/no)*" { send "yes\r"; set sshkey 1 }
2 L O! ~& J0 s* i( o" i- C"*assword:*" { send "$passwd\r"; set sshkey 0 }
" W9 C# n8 ?# `9 A# K$ x' @% ^0 wif sshkey == 1 {: `% X( }9 o+ C( R+ x a' B
expect "*password:*"
; r4 V' }2 t% | send "$passwd\r"
9 h' z- ?% A% b}+ Y4 r" X5 ]6 X7 E* f a
}
& {* Q* L' @- F! yexpect "*#"8 {+ C' E9 }1 B
# I1 i2 s7 @% `1 [, N% k+ {( r
if { [string compare $loginname "root"] == 0 } {
) e0 H+ i9 h3 n* [8 x7 q #send "echo \"$username:$newpasswd\" | chpasswd\r"2 {1 R1 I; \7 x- O) T- I) z* c$ y
send "echo \"$newpasswd\" | passwd --stdin \"$username\"\r". q B' s; ?: G: _3 B9 L5 m
} else {
4 i, |9 v h. O& v# _ send "passwd\r"' Q2 o* q! ?6 n$ X* m* {; t
expect {6 U1 N" I/ E, `5 D3 L
"*current*assword:" {send "$passwd\r"}3 V% F2 M, A% N2 x+ J6 s
"passwd: Authentication token manipulation error" {exit}
$ Q: K! [, H6 J }- c4 M5 F( t: V( v9 _ N
expect "New*assword:"9 ]: p0 a! t( e9 `: o: D
send "$newpasswd\r"+ V* m9 h# i9 X" ?$ t$ s3 Q# |
expect "Retype*assword:"
7 D5 B; K+ A1 f+ w* f5 Y send "$newpasswd\r"
! I- l7 |0 W1 e1 m2 g" F2 q}
}/ N% _+ {: r5 o2 B$ q! Z$ |" Aexpect "*#"- _3 W& Z$ |% t2 Z( }$ v- ?; t/ @: C
send "exit\r"
2 M9 f5 Y$ e# L$ M+ R1 }#interact 是否将交互权接过来,如果接过来,则用户这时可进行交互操作 |
|