/ / Používam nesprávny modul? pxssh - python, pexpect

Používam nesprávny modul? pxssh - python, pexpect

Snažím sa vytvoriť skript python, ktorý by skontroloval používateľské mená, heslá a povolil heslo pre zariadenia Cisco.

Skript sa jednoznačne prihlasuje do zariadenia, ale jepokúsiť sa nastaviť a zrušiť výzvu na shell. Mal by som používať len štandardný pexpect a nie pxssh? Skúsil som to taky, ale "ak" vyhlásenia nevyzerajú dobre fungovať s očakávaním.

Exception:
could not set shell prompt
unset PROMPT_COMMAND
^
% Invalid input detected at "^" marker.

3750_core#PS1="[PEXPECT]$ "
3750_core#set prompt="[PEXPECT]$ "
^
% Invalid input detected at "^" marker.

kód:

def check_creds(host, user, password, en_passwd):
global success
global failure

try:
ssh = pxssh.pxssh()
ssh.login(host, user, password, en_passwd)
if ssh.prompt(PRIV_EXEC_MODE):
print "privilege mode creds work"
ssh.logout()
success = True
if ssh.prompt(USER_EXEC_MODE):
print("username and password are correct")
ssh.sendline("enable")
ssh.sendline(en_passwd)
if ssh.prompt(PRIV_EXEC_MODE):
print "enable password is correct"
ssh.logout()
success = True
else:
print "enable password is incorrect"
ssh.logout()
failure = True

except pxssh.ExceptionPxssh, fail:
print str(fail)
failure = True
exit(0)

odpovede:

1 pre odpoveď č. 1

Áno, nesprávny modul. Našiel som správny spôsob, ako používať pexpect a tie statiny.

def check_creds(host, user, passwd, en_passwd):
ssh_newkey = "Are you sure you want to continue connecting (yes/no)?"
constr = "ssh " + user + "@" + host
ssh = pexpect.spawn(constr)
ret = ssh.expect([pexpect.TIMEOUT, ssh_newkey, "[P|p]assword:"])
if ret == 0:
print "[-] Error Connecting to " + host
return
if ret == 1:
ssh.sendline("yes")
ret = ssh.expect([pexpect.TIMEOUT, "[P|p]assword:"])
if ret == 0:
print "[-] Could not accept new key from " + host
return
ssh.sendline(passwd)
auth = ssh.expect(["[P|p]assword:", ">", "#"])
if auth == 0:
print "User password is incorrect"
return
if auth == 1:
print("username and password are correct")
ssh.sendline("enable")
ssh.sendline(en_passwd)
enable = ssh.expect(["[P|p]assword:", "#"])
if enable == 0:
print "enable password is incorrect"
return
if enable == 1:
print "enable password is correct"
return
if auth == 2:
print "privilege mode creds work"
return
else:
print "creds are incorrect"
return