How can you get the SSH return code using Paramiko? How can you get the SSH return code using Paramiko? python python

How can you get the SSH return code using Paramiko?


A much easier example that doesn't involve invoking the "lower level" channel class directly (i.e. - NOT using the client.get_transport().open_session() command):

import paramikoclient = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect('blahblah.com')stdin, stdout, stderr = client.exec_command("uptime")print stdout.channel.recv_exit_status()    # status is 0stdin, stdout, stderr = client.exec_command("oauwhduawhd")print stdout.channel.recv_exit_status()    # status is 127


SSHClient is a simple wrapper class around the more lower-level functionality in Paramiko. The API documentation lists a recv_exit_status() method on the Channel class.

A very simple demonstration script:

import paramikoimport getpasspw = getpass.getpass()client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.WarningPolicy())client.connect('127.0.0.1', password=pw)while True:    cmd = raw_input("Command to run: ")    if cmd == "":        break    chan = client.get_transport().open_session()    print "running '%s'" % cmd    chan.exec_command(cmd)    print "exit status: %s" % chan.recv_exit_status()client.close()

Example of its execution:

$ python sshtest.pyPassword: Command to run: truerunning 'true'exit status: 0Command to run: falserunning 'false'exit status: 1Command to run: $


Thanks for JanC, I added some modification for the example and tested in Python3, it really useful for me.

import paramikoimport getpasspw = getpass.getpass()client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.WarningPolicy())#client.set_missing_host_key_policy(paramiko.AutoAddPolicy())def start():    try :        client.connect('127.0.0.1', port=22, username='ubuntu', password=pw)        return True    except Exception as e:        #client.close()        print(e)        return Falsewhile start():    key = True    cmd = input("Command to run: ")    if cmd == "":        break    chan = client.get_transport().open_session()    print("running '%s'" % cmd)    chan.exec_command(cmd)    while key:        if chan.recv_ready():            print("recv:\n%s" % chan.recv(4096).decode('ascii'))        if chan.recv_stderr_ready():            print("error:\n%s" % chan.recv_stderr(4096).decode('ascii'))        if chan.exit_status_ready():            print("exit status: %s" % chan.recv_exit_status())            key = False            client.close()client.close()