How do I run multiple configuration commands in Dell EMC OS10 with Paramiko?

Question:

I am trying to run a series of commands to configure a vlan on a Dell EMC OS10 server using Paramiko. However I am running into a rather frustrating problem.

I want to run the following

# configure terminal
(config)# interface vlan 3
(conf-if-vl-3)# description VLAN-TEST
(conf-if-vl-3)# end

However, I can’t seem to figure out how to achieve this with paramiko.SSHClient().

When I try to use sshclient.exec_command("show vlan") it works great, it runs this command and exits. However, I don’t know how to run more than one command with a single exec_command.

If I run sshclient.exec_command("configure") to access the configuration shell, the command completes and I believe the channel is closed, since my next command sshclient.exec_command("interface vlan ...") is not successful since the switch is no longer in configure mode.

If there is a way to establish a persistent channel with exec_command that would be ideal.

Instead I have resorted to a function as follows

chan = sshClient.invoke_shell()
chan.send("configuren")
chan.send("interface vlan 3n")
chan.send("description VLAN_TESTn")
chan.send("endn")

Oddly, this works when I run it from a Python terminal one command at a time.

However, when I call this function from my Python main, it fails. Perhaps the channel is closed too soon when it goes out of scope from the function call?

Please advise if there is a more reasonable way to do this

Asked By: user21113865

||

Answers:

Regarding sending commands to the configure mode started with SSHClient.exec_commmand, see:
Execute (sub)commands in secondary shell/command on SSH server in Python Paramiko

Though it’s quite common that "devices" do not support the "exec" channel at all:
Executing command using Paramiko exec_command on device is not working


Regarding your problem with invoke_shell, it’s quite possible that the server needs some time to get ready for the next command.

Quick-and-dirty solution is to "sleep" shortly between the individual send calls.

Better solution to is to wait for command prompt before sending the next command.

Answered By: Martin Prikryl
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.