Python script to change Cleversafe account passwords

Update!

I’ve added some pauses between the ssh commands as the script was working faster than the devices, and hopefully made the comments better.

 

This is a simple script to change the password of a local account on all of our Cleversafe devices. The host file was created with a simple Bash command:

for i in {01..69}; do echo "clsf-slr0$i"; done >> /scripts/cleversafe_hosts

I might look into getting a dynamic list directly from the Manager via the CLI or some call depending on my time.

The script is below:

#!/usr/bin/env python
#
# Will work in Python >=2.6
#
# used the following as reference:
#
# http://www.opensource.apple.com/source/lldb/lldb-69/test/pexpect-2.4/pxssh.py
# http://stackoverflow.com/questions/15823011/python-pxssh-getting-an-password-refused-error-when-trying-to
-login-to-a-rem
# http://pexpect.sourceforge.net/pxssh.html#pxssh-expect
#
# The MOST important part of the script are the following lines:
# ssh_pxssh.PROMPT = current_host + '#'
# ssh_pxssh.login(current_host, usrnm, cur_pwd, auto_prompt_reset=False)
#
# I can not change the prompt on the remote device so the pxssh process would fail
# you have to set the "auto_prompt_reset" to false.
#
# You then have to set the PROMPT attribute to the pxssh.pxssh object
# though how is not made clear, trial an error found it.
#
# I've added a pause in the password reset part as it didn't always work
# as it was going too fast
#
# requires the following packages:
# python-pip (so I could install and use PuDB)
# pexpect
#

import os, sys
import getpass
import pty
import re
import pexpect, pxssh
import time

print "This script changes Cleversafe device account passwords"
user_file = raw_input('Please supply the source host file (full path):')
usrnm = raw_input('Enter username:')
cur_pwd = getpass.getpass('Enter current password:')
new_pwd = getpass.getpass('Enter new password:')

host_file = open(user_file, "r")
for lines in host_file:
    current_host = re.sub('[\'\\n]', '', lines)
    print '''Currently working on....''' + current_host
    try:
        ssh_pxssh = pxssh.pxssh()
        ssh_pxssh.PROMPT = current_host + '#'
        ssh_pxssh.login(current_host, usrnm, cur_pwd, auto_prompt_reset=False)
#       ssh_pxssh.sendline('help')        # test command
        ssh_pxssh.sendline('password')    # run a command
        time.sleep(2)                     # pause 2 secs
        ssh_pxssh.sendline(cur_pwd)
        time.sleep(2)                     # pause 2 secs
        ssh_pxssh.sendline(new_pwd)
        time.sleep(2)                     # pause 2 secs
        ssh_pxssh.sendline(new_pwd)
        time.sleep(2)                     # pause 2 secs
        ssh_pxssh.prompt()                # match the prompt
        print(ssh_pxssh.before)           # print everything before the prompt.
        ssh_pxssh.logout()
    except pxssh.ExceptionPxssh as e:
        print("pxssh failed on login.")
        print(e)
host_file.close()

Leave a Reply

Your email address will not be published.