Skip to main content

An SSH automation tool based on Exscript

Project description

Introduction

[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(
        host='route-views.routeviews.org',
        # route-views doesn't need password
        account= Account(name='rviews', password=''),
        debug=0,
        json_logfile='/tmp/cmd_log.json',
        )

    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))
    sess.close()

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="127.0.0.1", port=22, account=account, driver="generic", debug=0)
    assert conn is not None
    example_tfsm_template = """Value UNAME_LINE (.+)

Start
  ^${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)
    conn.close(force=True)

if __name__=="__main__":
    main()

Example test suite setup

  • git clone git@github.com:knipknap/Exscript

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

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

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

  • one command is supported: ls

    [1]: https://pypi.python.org/pypi/cannon # cannon on pypi [2]: https://pypi.python.org/pypi/exscript # Exscript on pypi

Project details


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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file cannon-0.0.80.tar.gz.

File metadata

  • Download URL: cannon-0.0.80.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.7.0 Linux/5.10.0-9-amd64

File hashes

Hashes for cannon-0.0.80.tar.gz
Algorithm Hash digest
SHA256 a9edf76a259b86f3583daacc120db17b9bc268a5dacf2ec99ff2c6eaeb0658a3
MD5 9471b6d179ae34ee6402eaa3c7ff2ca6
BLAKE2b-256 062be236809c880f4b642df9518675b2488c8ff0defb12e07b7bff4a35f12bc9

See more details on using hashes here.

File details

Details for the file cannon-0.0.80-py3-none-any.whl.

File metadata

  • Download URL: cannon-0.0.80-py3-none-any.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.7.0 Linux/5.10.0-9-amd64

File hashes

Hashes for cannon-0.0.80-py3-none-any.whl
Algorithm Hash digest
SHA256 8ae84a4ecbbb118e9c0b7e41d38f08a68ab7b8fc15e5f2aefc4811377509a595
MD5 3027ef243e4cb4b89058c0c85ca30c39
BLAKE2b-256 08b61490651e4aef3d754dd180da857ad8ba2bd1af5ad7bbf430f64c6bb83177

See more details on using hashes here.

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