Issue with capturing Password: prompt on remote device

Viewed 280

Fabric not seeing the Password: prompt for remote device (Aruba Mobility Master) over SSH.

The script I wrote is using fabric2 and Python3 to login to a remote network device, and running a command to SCP a file from this device to another device. After running the SCP command the device asks for password. This prompt is visible when running over a normal SSH client, but not visible when running with fabric.

I have tested with pty=False and pty=True

The script doesn't hang like its waiting for input either. It just continues and the SCP fails with incorrect password.

The password prompt is a bit special in that it will echo back characters with stars (*) instead of not echoing anything at all.

The network device does not provide a normal bash shell. Instead its a vendor specific shell (Aruba/HPE). The device is "Aruba Mobility Master"

from invoke import Responder

scppass = Responder(
    pattern=r'Password:',
    response='MyPassword\n',
)

connect_kwargs = {"password": "LoginPassword"}
c = Connection(host="1.2.3.4", user="username", connect_kwargs=connect_kwargs)

# Have tried with pty=False and pty=True
c.run("copy flash: configbackup.tar.gz scp: 2.3.4.5 username /PATH/configbackup.tar.gz", pty=True, watchers=[scppass])

This is how it looks when run from an interactive SSH session

Password:*********************


Secure file copy:
Press 'q' to abort.
....
File uploaded successfully

This is the output from fabric

Secure file copy:
Press 'q' to abort.
............
Error copying file:
Permission denied: wrong username or password

Also tried with

ssh username@1.2.3.4 "copy flash: nothng scp: 2.3.4.5 user /something/asd" >out 2>err

ssh -t username@1.2.3.4 "copy flash: nothng scp: 2.3.4.5 user /something/asd" >out 2>err

Neither of these capture the "Password:" either in either the stdout or stderr file.

0 Answers
Related