As you see below, is it possible to save the result? Cause, at second and third stdout.read() I couldn't reach the result.
import paramiko import os dssh = paramiko.SSHClient() dssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) dssh.connect('192.168.1.250', username='root', password='pass') import os stdin, stdout, stderr = dssh.exec_command('ifconfig') print stdout.read() print ('Sleeping 2 seconds!') os.system('sleep 2') stdin, stdout, stderr = dssh.exec_command('ls -l') print stdout.read() print stdout.read() print stdout.read() dssh.close()
Using exec_command() in Paramiko returns a tuple (stdin, stdout, stderr) . Most of the time, you just want to read stdout and ignore stdin and stderr . You can get the output the command by using stdout. read() (returns a string) or stdout.
A Paramiko SSH Example: Connect to Your Server Using a Password. This section shows you how to authenticate to a remote server with a username and password. To begin, create a new file named first_experiment.py and add the contents of the example file. Ensure that you update the file with your own Linode's details.
SSH client & key policies class paramiko.client. SSHClient. A high-level representation of a session with an SSH server. This class wraps Transport , Channel , and SFTPClient to take care of most aspects of authenticating and opening channels.
readlines() will return the directory that you changed to. Show activity on this post. Well paramiko creates an instance of shell and all the commands that you wish to execute in paramiko have to be given in that instance of shell only. For example: Let us say I have some folder in the directory I am in.
Imagine that stdout
is an ordinary file. What do you expect to get if you call file.read()
the second time? -- nothing (empty string) unless the file has changed outside.
To save the string:
output = stdout.read()
You might find Fabric simpler to use (it uses paramiko
to execute commands under the hood).
You can try this Generic API
def ssh_ctrl(ip, user, password,cmd): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(hostname=ip, username=user, password=password, timeout=tout, compress = True,look_for_keys=False, allow_agent=False) except (socket.error,paramiko.AuthenticationException,paramiko.SSHException) as message: print "ERROR: SSH connection to "+ip+" failed: " +str(message) sys.exit(1) stdin, stdout, ssh_stderr = ssh.exec_command(cmd) out = stdout.read() stdin.flush() ssh.close() return out
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With