Automate Cisco Networks with Python and Netmiko

Simplifying Network Automation with Python and Netmiko for Cisco Routers/Switches


In today’s fast-paced networking environment, the need for efficient and reliable network automation tools has never been greater. Cisco routers and switches are at the heart of many networks, and managing them manually can be time-consuming and prone to errors. In this blog post, we will explore the power of Python scripting and the Netmiko library to automate interactions with Cisco devices, making network management more streamlined and less error-prone.

Why Network Automation?

Network automation is the key to unlocking efficiency and scalability in modern network management. By automating routine tasks, administrators can save time, reduce human errors, and ensure consistency across the network infrastructure. Python has emerged as a popular language for network automation due to its simplicity, versatility, and a wealth of libraries specifically designed for networking tasks.

Introduction to Netmiko:

Netmiko is a multi-vendor library that simplifies the process of automating network devices. Developed by the Network to Code community, Netmiko abstracts the complexities of dealing with different networking platforms and provides a consistent interface for automation. In this blog post, we’ll focus on using Netmiko to interact with Cisco routers and switches.

The Script:

Let’s dissect the provided Python script that uses Netmiko to establish a Telnet connection to a Cisco router:

  1. Setting Up Router Details: The script begins by defining the details of the Cisco router, including the device type (‘cisco_ios_telnet’), IP address, Telnet username, password, and enable password.
  2. Initializing Netmiko Connection: The ConnectHandler method is used to create a Netmiko connection object (net_connect) with the specified router details.
  3. Establishing Telnet Connection: The script attempts to establish a Telnet connection to the router using the net_connect object. If successful, it enters privileged exec mode with the enable() method.
  4. Handling Exceptions: The script includes exception handling to manage potential errors during the connection attempt. Any exceptions are caught, and an appropriate error message is printed.
  5. Finally Block: Regardless of success or failure, the script includes a ‘finally’ block to ensure that the script disconnects from the router using the disconnect() method. This block also handles cases where the net_connect object might not have been initialized.


This script serves as a simple yet powerful example of using Python and Netmiko for network automation. By leveraging these tools, network administrators can automate routine tasks, enhance efficiency, and reduce the risk of human errors. As you explore the world of network automation, consider extending the script to include more advanced functionalities such as configuration changes, backups, or monitoring. The possibilities are vast, and with the right tools, managing Cisco routers and switches becomes a more manageable and enjoyable task.

from netmiko import ConnectHandler

# Define the router details
router = {
    'device_type': 'cisco_ios_telnet',  # Specify Telnet as the device type
    'ip': '',                # Replace with the actual IP address of your router
    'username': 'cisco',                # Replace with your Telnet username
    'password': 'cisco@123',            # Replace with your Telnet password
    'secret': 'cisco@123',              # Replace with your enable password

# Initialize the net_connect object outside the try block
net_connect = None

    # Establish a Telnet connection to the router using Netmiko
    net_connect = ConnectHandler(**router)
    # Enter enable mode (privileged exec) on the router

    # If the above steps are successful, print a success message
    print("Telnet login successful!")

except Exception as e:
    # If any exception occurs during the connection attempt, print an error message
    print(f"Telnet login failed: {str(e)}")

    # Disconnect from the router, regardless of success or failure
        if net_connect:
            print("Disconnected from the router.")
    except NameError:


Here is the YouTube Video:

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *