Question

I make ssh login with this script:

import pxssh
import pexpect

s = pxssh.pxssh()
hostname = 'localhost'
username = 'py_worker'
password = 'nicejob'
s.login (hostname, username, password)
print "logged in"

Then I want to run some program which in some case may require sudo password and in some case may not require. So I want a scrip which could provide sudo password in those cases when required and just run the program if sudo is not asked. I thought this code could handle:

s.sendline('sudo apt-get check')
i=s.expect(['password', pexpect.EOF])
if i==0:
    print "I give password"
    s.sendline("nicejob")
    s.prompt()
elif i==1:
    print "EOF cought"
    s.prompt()
print s.before

Could someone help with code lines which could handle sudo correctly?

Was it helpful?

Solution

thanks for asking this, it helped me.

youll probably need to flesh out the exceptions and re for the rootprompt but here you go.

def sudo(s,password):
    rootprompt = re.compile('.*[$#]')
    s.sendline('sudo -s')
    i = s.expect([rootprompt,'assword.*: '])
    if i==0:
        print "didnt need password!"
        pass
    elif i==1:
        print "sending password"
        s.sendline(password)
        j = s.expect([rootprompt,'Sorry, try again'])
        if j == 0:
            pass
        elif j == 1:
            raise Exception("bad password")
    else:
        raise Exception("unexpected output")
    s.set_unique_promp
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top