Skip to main content

An SSH automation tool based on Exscript

Project description


[cannon][1] is a wrapper around [exscript][2] to connect with remote server or network devices with ssh.

Example Usage - Cisco IOS

This script will login, run a few show commands. If you want an interactive session, set interact=True when calling Shell()

import sys

from cannon import Shell, Account
from loguru import logger

log_stderr_id = logger.add(sink=sys.stderr)

@logger.catch(default=True, onerror=lambda _: sys.exit(1))
def main():
    sess = Shell(
        # route-views doesn't need password
        account= Account(name='rviews', password=''),

    sess.execute('term len 0')

    sess.execute('show clock')

    sess.execute('show version')
    version_text = sess.response

    # template is a TextFSM template
    values = sess.execute('show ip int brief',
        template="""Value INTF (\S+)\nValue IPADDR (\S+)\nValue STATUS (up|down|administratively down)\nValue PROTO (up|down)\n\nStart\n  ^${INTF}\s+${IPADDR}\s+\w+\s+\w+\s+${STATUS}\s+${PROTO} -> Record""")
    print("VALUES "+str(values))

Example Usage - Linux

from getpass import getpass
import sys

from cannon.main import Shell, Account

log_stderr_id = logger.add(sink=sys.stderr)

@logger.catch(default=True, onerror=lambda _: sys.exit(1))
def main():
    account = Account("mpenning", getpass("Login password: "))
    conn = Shell(host="", port=22, account=account, driver="generic", debug=0)
    assert conn is not None
    example_tfsm_template = """Value UNAME_LINE (.+)

    print(conn.execute("sudo uname -a", debug=0, template=example_tfsm_template, timeout=2))
    print(conn.execute("whoami", debug=0, template=None, timeout=2))
    #print("FOO2", conn.response)

if __name__=="__main__":

Example test suite setup

  • git clone

  • cd into Exscript/tests/Exscript/protocols and chmod 600 id_rsa

  • exscript spawns a local tests ssh daemon, pytest Exscript/tests/Exscript/protocols/

  • Connect with ssh -i id_rsa -p 1236 user@localhost

  • one command is supported: ls

    [1]: # cannon on pypi [2]: # Exscript on pypi

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cannon-0.0.80.tar.gz (25.9 kB view hashes)

Uploaded source

Built Distribution

cannon-0.0.80-py3-none-any.whl (31.3 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page