0

I am setting up a remote SSH connection to a remote server and running a specific command to dump a DB table. The remote server is a hardened linux OS with it's own shell. I am running a remote sql type of command to dump out a lot of data. My python script is using an interactive SSH session to do this. As you can see below, I am running a command, letting it sleep for 5 seconds, then dumping the buffer. I've tried many different options for the "remote_conn.recv()" function but I cannot get the full output. The output is very large and it is paged (press space for more). I am not even getting the complete output of the first page. If there are 50 lines on the first page, I'm getting the first 4 only.

Are there better ways of doing this? How I can just grab the complete output? Below is the Paramiko portion of my script.

# Create instance of SSHClient object
remote_conn_pre = paramiko.SSHClient()

# Automatically add untrusted hosts
remote_conn_pre.set_missing_host_key_policy(
     paramiko.AutoAddPolicy())

# initiate SSH connection
remote_conn_pre.connect(options.ip, username=options.userName, password=options.password)

# Use invoke_shell to establish an 'interactive session'
remote_conn = remote_conn_pre.invoke_shell()

remote_conn.send("<remote sql command here>")
time.sleep(5)
output = remote_conn.recv(65535)

print output
remote_conn.close()
hiddenicon
  • 551
  • 2
  • 11
  • 23

1 Answers1

0

I was able to get the full output by grabbing smaller chunks of the buffer and concat'ing them together until I hit a certain string in the buffer.

while True:
    data = remote_conn.recv(500)

    if "<string>" in data:
        break
    else:
        finalOutput += data
hiddenicon
  • 551
  • 2
  • 11
  • 23