<code>Python 遠端批量修改密碼腳本</code>
<code>#tar -zxvf pexpect-3.0.tar.gz</code>
<code>#cd pexpect-3.0</code>
<code>#python setup.py install</code>
<code>#!/usr/bin/env python</code>
<code>#coding:utf8</code>
<code>import</code> <code>pexpect </code>
<code>import</code> <code>sys </code>
<code>iplist </code><code>=</code> <code>[</code><code>'192.168.140.142'</code><code>,</code><code>'192.168.140.145'</code><code>] </code><code>##定義主機清單</code>
<code>oldpasswd </code><code>=</code> <code>'234567'</code> <code>##舊密碼</code>
<code>newpasswd </code><code>=</code> <code>'1234567'</code> <code>##新密碼</code>
<code>while</code> <code>iplist:</code>
<code> </code><code>ip </code><code>=</code> <code>iplist[</code><code>-</code><code>1</code><code>] </code><code>##擷取一個IP</code>
<code> </code><code>iplist.pop() </code><code>##清單去掉一個值</code>
<code> </code><code>child </code><code>=</code> <code>pexpect.spawn(</code><code>'ssh root@'</code><code>+</code><code>ip) </code><code>##定義觸發</code>
<code> </code><code>fout </code><code>=</code> <code>file</code><code>(</code><code>'passlog.txt'</code><code>,</code><code>'a'</code><code>) </code><code>##定義日志檔案,</code>
<code> </code><code>child.logfile </code><code>=</code> <code>fout</code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>while</code> <code>True</code><code>:</code>
<code> </code><code>index </code><code>=</code> <code>child.expect([</code><code>'(yes/no)'</code><code>,</code><code>'(?i)password:'</code><code>])</code>
<code> </code><code>if</code> <code>index </code><code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>child.sendline(</code><code>'yes'</code><code>)</code>
<code> </code><code>elif</code> <code>index </code><code>=</code><code>=</code> <code>1</code><code>:</code>
<code> </code><code>child.sendline(oldpasswd)</code>
<code> </code><code>child.expect(</code><code>'#'</code><code>)</code>
<code> </code><code>child.sendline(</code><code>'echo '</code><code>+</code><code>newpasswd</code><code>+</code><code>' | passwd --stdin root'</code><code>)</code>
<code> </code><code>child.sendline(</code><code>'exit'</code><code>)</code>
<code> </code><code>except</code> <code>pexpect.TIMEOUT:</code>
<code> </code><code>print</code> <code>>>sys.stderr, ip</code><code>+</code><code>' timeout'</code>
<code> </code><code>except</code> <code>pexpect.EOF:</code>
<code> </code><code>print</code> <code>>>sys.stderr, ip</code><code>+</code><code>' <the end>'</code>
<code>(</code><code>1</code><code>)spawn類</code>
<code> </code><code>class</code> <code>pexpect.spawn(command,args</code><code>=</code><code>[],timeout</code><code>=</code><code>30</code><code>,maxread</code><code>=</code><code>2000</code><code>,searchwidowsize</code><code>=</code><code>None</code>
<code>,logfile</code><code>=</code><code>None</code><code>,cwd</code><code>=</code><code>None</code><code>,env</code><code>=</code><code>None</code><code>,ignore_sighup</code><code>=</code><code>True</code><code>)</code>
<code>(</code><code>2</code><code>)run函數</code>
<code>pexpect.run(command,timeout</code><code>=</code><code>-</code><code>1</code><code>,withexitstatus</code><code>=</code><code>False</code><code>,events</code><code>=</code><code>None</code><code>,extra_args</code><code>=</code><code>None</code><code>,</code>
<code>logfile</code><code>=</code><code>None</code><code>,cwd</code><code>=</code><code>None</code><code>,env</code><code>=</code><code>None</code><code>).</code>
<code>(</code><code>3</code><code>)pxssh類</code>
<code>class</code> <code>pexpect.pxssh.pxssh(timeout</code><code>=</code><code>30</code><code>,maxread</code><code>=</code><code>2000</code><code>,searchwidowsize</code><code>=</code><code>None</code><code>,logfile</code><code>=</code><code>None</code><code>,</code>
<code>cwd</code><code>=</code><code>None</code><code>,env</code><code>=</code><code>None</code><code>)</code>
<code>pxssh常用的三個方法:</code>
<code> </code><code>login()建立連接配接;</code>
<code> </code><code>logout()斷開連接配接;</code>
<code> </code><code>prompt()等待系統提示符,用于等待指令執行結束</code>
<code>#!/usr/bin/python# encoding=utf-8# Filename: pexpect_test.pyimport pexpectdef sshCmd(ip, passwd, cmd):</code>
<code> </code><code>ret </code><code>=</code> <code>-</code><code>1</code>
<code> </code><code>ssh </code><code>=</code> <code>pexpect.spawn(</code><code>'ssh root@%s "%s"'</code> <code>%</code> <code>(ip, cmd)) </code><code>try</code><code>:</code>
<code> </code><code>i </code><code>=</code> <code>ssh.expect([</code><code>'password:'</code><code>, </code><code>'continue connecting(yes/no)?'</code><code>], timeout</code><code>=</code><code>5</code><code>) </code><code>if</code> <code>i </code><code>=</code><code>=</code> <code>0</code><code>:</code>
<code> </code><code>ssh.sendline(passwd) </code><code>elif</code> <code>i </code><code>=</code><code>=</code> <code>1</code><code>:</code>
<code> </code><code>ssh.sendline(</code><code>'yes\n'</code><code>)</code>
<code> </code><code>ssh.expect(</code><code>'password:'</code><code>)</code>
<code> </code><code>ssh.sendline(passwd)</code>
<code> </code><code>ssh.sendline(cmd)</code>
<code> </code><code>r </code><code>=</code> <code>ssh.read() </code><code>print</code> <code>r</code>
<code> </code><code>ret </code><code>=</code> <code>0</code>
<code> </code><code>except</code> <code>pexpect.EOF: </code><code>print</code> <code>"EOF"</code>
<code> </code><code>ret </code><code>=</code> <code>-</code><code>1</code>
<code> </code><code>except</code> <code>pexpect.TIMEOUT: </code><code>print</code> <code>"TIMEOUT"</code>
<code> </code><code>ret </code><code>=</code> <code>-</code><code>2</code>
<code> </code><code>finally</code><code>:</code>
<code> </code><code>ssh.close() </code><code>return</code> <code>ret</code>
<code>sshCmd(</code><code>'xxx.xxx.xxx.xxx'</code><code>,</code><code>'xxxxxx'</code><code>,</code><code>'ls /root'</code><code>)</code>
本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1827747,如需轉載請自行聯系原作者