|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
oldpwd="oracle"
def ssh_cmd(user, ip, cmd, newpwd):
ssh = pexpect.spawn('ssh %s@%s "%s"' % (user,ip,cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(oldpwd)
elif i == 1:
ssh.sendline('yes')
ssh.expect('password: ')
ssh.sendline(oldpwd)
ssh.expect("(current) UNIX password:") ## 程序走到这一句,就会出现超时的情况。
ssh.sendline(oldpwd)
ssh.sendline(newpwd)
ssh.sendline(newpwd)
ssh.expect("passwd: all authentication tokens updated successfully.")
except pexpect.EOF:
print ("EOF")
except pexpect.TIMEOUT:
print ("TIMEOUT")
else:
r = ssh.read()
print (r)
print ('haha')
ssh.close()
if __name__ == '__main__':
ssh_cmd("grid","192.168.10.5","passwd","zaq1@WSXcde3")
1:修改Linux操作系统密码,我只想自己修改自己的密码,如:grid用户修改自己的密码,而非用root修改。
2:这段儿代码主要是从网上摘取,并做了简单的修改
3:在上面注释的部分,出现超时的情况。如果把那句话去掉,修改密码是没有问题的。但是为了让程序可控,我还是希望能有返回信息。
4:例如:ssh.expect('New UNIX password:'),ssh.expect('Retype new UNIX password:')这两句话也是同样会出现超时。
|
|