Paramiko session times out, but i need to execute a lot of commands

我怕爱的太早我们不能终老 提交于 2019-11-28 12:39:35

问题


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. :)


回答1:


I think what you need is invoke_shell(). For example:

ssh = paramiko.SSHClient()
... ...
chan = ssh.invoke_shell() # starts an interactive session

chan.send('command 1\r')
output = chan.recv()

chan.send('command 2\r')
output = chan.recv()
... ...

The Channel has many other methods. You can refer to the document for more details.




回答2:


You need to properly chain the commands together, as in a shell script:

stdin, stdout, stderr = ssh.exec_command('''
command1
&& command2
&& command3
''')


来源:https://stackoverflow.com/questions/41183971/paramiko-session-times-out-but-i-need-to-execute-a-lot-of-commands

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!