cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
5442
Views
0
Helpful
4
Replies

SSH2-Python Script - Terminal Server --> Unconfigured Switch

karl.baker
Level 1
Level 1

Good afternoon

 

I'm running into a wall when trying to create a script that'll go through my terminal server (C2811) to configure a new (Catalyst) switch.

 

I've tested this code on the C2811 and it works fine, but it seems like once its going through the async module it dies. I'm able to manually SSH into 192.168.25.100:2002 and it works fine so it doesn't seem like its a bad module/cable. 

 

I'm not married to SSH2-Python, so if there is another library/solution I'll be okay with trying it out.

 

Thoughts?

 

SSH2-Python Script:

 

import socket, time
from ssh2.session import Session

host = '192.168.25.100' # C2811 Router
user = 'tech'
password = 'tech'
port = 2002 # Port where my unconfigured switch is connected to. 


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))

session = Session()
session.handshake(sock)
session.userauth_password(user, password)

channel = session.open_session()
channel.shell()

channel.write("terminal length 0\r")
channel.write("show run\r")

channel.close()

size, data = channel.read()
while size > 0:
    print(data.decode())
    size, data = channel.read()

print("Exit status: {0}".format(channel.get_exit_status()))

 

 

4 Replies 4

derek-shnosh
Level 1
Level 1

I'm relatively new (less than a month) to any kind of programming/dvelopment, let alone automation with Python, so someone more saavy might have a better suggestion.

That being said I've had success using exscript for config and management commands to cisco devices.

Take a look at some examples in the exscript documentation to see if it might be something of use.

Also, Nornir just recently surfaced and might be worth a look.

 

Edit: I didn't fully read your post before responding with my previous Exscript example which didn't at all provide any guidance for accessing the ASYNC line on your 2811, so apologies for that.

Hi

 You should try Paramiko, Netmiko or Expect. They always worked fine for me.

 

 

-If I helped you somehow, please, rate it as useful.-

You can try with NAPALM library. It's pretty easy and works. Just with 3-4 lines of code, you can connect to the device.

https://napalm-automation.net/

omz
VIP Alumni
VIP Alumni

I would recommend paramiko. 

 

Have a look at the below example - 

 

 

import paramiko
import time


def disable_paging(remote_conn):
    '''Disable paging on a Cisco router'''

    remote_conn.send("terminal length 0\n")
    time.sleep(1)

    # Clear the buffer on the screen
    output = remote_conn.recv(1000)

    return output


if __name__ == '__main__':


    ip = '1.1.1.16'
    username = 'testuser'
    password = 'password'

    # Create instance of SSHClient object
    remote_conn_pre = paramiko.SSHClient()

    # Automatically add untrusted hosts (make sure okay for security policy in your environment)
    remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # initiate SSH connection
    remote_conn_pre.connect(ip, username=username, password=password, look_for_keys=False, allow_agent=False)
    print "SSH connection established to %s" % ip

    # Use invoke_shell to establish an 'interactive session'
    remote_conn = remote_conn_pre.invoke_shell()
    print "Interactive SSH session established"

    # Strip the initial router prompt
    output = remote_conn.recv(1000)

    # See what we have
    print output

    # Turn off paging
    disable_paging(remote_conn)

    # Now let's try to send the router a command
    remote_conn.send("\n")
    remote_conn.send("show ip int brief\n")

    # Wait for the command to complete
    time.sleep(2)
    
    output = remote_conn.recv(5000)
    print output

Hope this helps.

 

Please rate helpful posts and accept solutions :) 

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: