1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
Python 远程批量修改密码脚本
#tar -zxvf pexpect-3.0.tar.gz
#cd pexpect-3.0
#python setup.py install
#!/usr/bin/env python
#coding:utf8
import
pexpect
import
sys
iplist
=
[
'192.168.140.142'
,
'192.168.140.145'
]
##定义主机列表
oldpasswd
=
'234567'
##旧密码
newpasswd
=
'1234567'
##新密码
while
iplist:
ip
=
iplist[
-
1
]
##获取一个IP
iplist.pop()
##列表去掉一个值
child
=
pexpect.spawn(
'ssh root@'
+
ip)
##定义触发
fout
=
file
(
'passlog.txt'
,
'a'
)
##定义日志文件,
child.logfile
=
fout
try
:
while
True
:
index
=
child.expect([
'(yes/no)'
,
'(?i)password:'
])
if
index
=
=
0
:
child.sendline(
'yes'
)
elif
index
=
=
1
:
child.sendline(oldpasswd)
child.expect(
'#'
)
child.sendline(
'echo '
+
newpasswd
+
' | passwd --stdin root'
)
child.expect(
'#'
)
child.sendline(
'exit'
)
except
pexpect.TIMEOUT:
print
>>sys.stderr, ip
+
' timeout'
except
pexpect.EOF:
print
>>sys.stderr, ip
+
' <the end>'
(
1
)spawn类
class
pexpect.spawn(command,args
=
[],timeout
=
30
,maxread
=
2000
,searchwidowsize
=
None
,logfile
=
None
,cwd
=
None
,env
=
None
,ignore_sighup
=
True
)
(
2
)run函数
pexpect.run(command,timeout
=
-
1
,withexitstatus
=
False
,events
=
None
,extra_args
=
None
,
logfile
=
None
,cwd
=
None
,env
=
None
).
(
3
)pxssh类
class
pexpect.pxssh.pxssh(timeout
=
30
,maxread
=
2000
,searchwidowsize
=
None
,logfile
=
None
,
cwd
=
None
,env
=
None
)
pxssh常用的三个方法:
login()建立连接;
logout()断开连接;
prompt()等待系统提示符,用于等待命令执行结束
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/usr/bin/python# encoding=utf-8# Filename: pexpect_test.pyimport pexpectdef sshCmd(ip, passwd, cmd):
ret
=
-
1
ssh
=
pexpect.spawn(
'ssh root@%s "%s"'
%
(ip, cmd))
try
:
i
=
ssh.expect([
'password:'
,
'continue connecting(yes/no)?'
], timeout
=
5
)
if
i
=
=
0
:
ssh.sendline(passwd)
elif
i
=
=
1
:
ssh.sendline(
'yes\n'
)
ssh.expect(
'password:'
)
ssh.sendline(passwd)
ssh.sendline(cmd)
r
=
ssh.read()
print
r
ret
=
0
except
pexpect.EOF:
print
"EOF"
ret
=
-
1
except
pexpect.TIMEOUT:
print
"TIMEOUT"
ret
=
-
2
finally
:
ssh.close()
return
ret
sshCmd(
'xxx.xxx.xxx.xxx'
,
'xxxxxx'
,
'ls /root'
)
|
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1827747,如需转载请自行联系原作者