I'm working on a script (python 2.7) that is wotking with a remote device running Cisco IOS, so I need to execute a lot of commands through ssh. Few commands have no output and some of them have, and I want to recieve the output. It goes something like this:
import paramiko
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(self._ip, port=22, username=username, password=password
stdin, stdout, stderr = ssh.exec_command('command with no output')
stdin, stdout, stderr = ssh.exec_command('command with no output')
stdin, stdout, stderr = ssh.exec_command('command with output')
sh_ver = stdout.readlines()
The thing is exec_command
is causes the channel to close and it can’t be reused, but it's not possible for me to open a new channel in order to execute another command, because this is a session of commands that in the end I need to get the output.
I've tried to execute the commands this way as well:
stdin, stdout, stderr = ssh.exec_command('''
command
command
command
''')
output = stdout.readlines()
but this way, output
is empty. And even if it would'nt, I need to perform a few checks on the output
and then continue the session where I stopped.
So what do I need? A way to manage this ssh connection without closing it or starting a new one, and to easily recieve the output from the command.
Thanks in advance, Miri. :)
I think what you need is
invoke_shell()
. For example:The
Channel
has many other methods. You can refer to the document for more details.