Python Forum
Fabric - Run method is not being finished
Thread Rating:
  • 2 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Fabric - Run method is not being finished
#1
Hi There,
I've prepared a piece of code, which intention is to log as a root user.
I can't use "sudo" method because that is not existing on the system that i want to control and logging directly as "root" is impossible. My idea is to log as a "admin" user and then use "su" command to switch to "root" user.

Code:
from fabric import Connection
from invoke import Responder

sudopass = Responder(pattern=r'Password:', response='adminPassword\n')

with Connection('192.168.0.106', user="admin", port=22, connect_kwargs={"password": "admin"}) as dss:
    command = "uname -s"
    print("Response on {} is: {}".format(command, dss.run(command)))
    command = "whoami"
    print("Response on {} is: {}".format(command, dss.run(command)))
    command = "su"
    print("Response on {} is after executing su command: {}".format(command,
                                                                    dss.run(command, pty=True, watchers=[sudopass])))
    command = "whoami"
    print("Response on {} is: {}".format(command, dss.run(command)))
print("Script end")
Output:
Output:
Linux Response on uname -s is: Command exited with status 0. === stdout === Linux (no stderr) dssadmin Response on whoami is: Command exited with status 0. === stdout === dssadmin (no stderr) Password: /home/dssadmin #
As you can see script got stuck after sending "su" command. Any ideas how to solve that? Thanks for help in advance:)

===========================================================================
Python 3.7
Fabric 2.4.0
Reply
#2
Looks like it's maybe still waiting for the password? Maybe try changing the pattern to include trailing whitespace: r"Password:\s*?"
Reply
#3
No no, it was logged properly for sure. I can see that after sending "su" command it is now in /home/dssadmin directory as it should be after successful loggin. Sorry, i should mention that in my post:)

According to me it's waiting for some exit code or sometthing
Reply
#4
So far i've this:
So far i've this:
sudopass = Responder(pattern=r'Password:', response='admin__password\n')

def su(connection, command) -> int:
    return connection.run(f"su -c '{command}'", pty=True, watchers=[sudopass])

with Connection('192.168.0.106', user="dssadmin", port=22, connect_kwargs={"password": "password"}) as ssh_connection:
    command = "uname -s"
    print("Response on {} is: {}".format(command, ssh_connection.run(command)))
    command = "whoami"
    print("Response on {} is: {}".format(command, ssh_connection.run(command)))
    command = "opkg update"
    print("Response on {} is after executing su command: {}".format(command, su(ssh_connection, command)))
    command = "opkg install rescue-utils"
    print("Response on {} is after executing su command: {}".format(command, su(ssh_connection, command)))
    command = "whoami"
    print("Response on {} is: {}".format(command, su(dss, command)))
print("Script end")
Not exactly what i needed but working fine
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Process finished with exit code 137 (interrupted by signal 9: SIGKILL) erdemath 2 9,384 Apr-18-2022, 08:40 PM
Last Post: erdemath
  Using .hdf5 files only once they are finished writing pyhill00 7 2,720 Nov-25-2021, 06:01 PM
Last Post: pyhill00
  How to check if a file has finished being written leocsmith 2 7,688 Apr-14-2021, 04:21 PM
Last Post: perfringo
  process finished with exit code -1073741819 (0xC0000005) GMCobraz 8 5,299 Sep-01-2020, 08:19 AM
Last Post: GMCobraz
  How to stop Xmodem after bin file transfer was finished shaya2103 0 2,473 Nov-27-2019, 04:33 PM
Last Post: shaya2103
  Process finished with exit code -107374819 (0xC0000375) mrazko 2 8,394 Apr-05-2019, 12:46 PM
Last Post: mrazko
  Progress Finished Question malonn 32 17,220 May-23-2018, 02:43 AM
Last Post: malonn

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020