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 -
cdintoExscript/tests/Exscript/protocolsandchmod 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
Metadata
Release files for cannon 0.0.80
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| cannon-0.0.80.tar.gz | 25.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cannon-0.0.80-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.1 kB
Release files / cannon-0.0.80.tar.gz
| Download URL | cannon-0.0.80.tar.gz |
|---|---|
| Size | 25.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9edf76a259b86f3583daacc120db17b9bc268a5dacf2ec99ff2c6eaeb0658a3
|
|
BLAKE2b-256 checksum How to use checksums |
062be236809c880f4b642df9518675b2488c8ff0defb12e07b7bff4a35f12bc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.7.0 Linux/5.10.0-9-amd64
|
Release files / cannon-0.0.80-py3-none-any.whl
| Download URL | cannon-0.0.80-py3-none-any.whl |
|---|---|
| Size | 31.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ae84a4ecbbb118e9c0b7e41d38f08a68ab7b8fc15e5f2aefc4811377509a595
|
|
BLAKE2b-256 checksum How to use checksums |
08b61490651e4aef3d754dd180da857ad8ba2bd1af5ad7bbf430f64c6bb83177
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.7.0 Linux/5.10.0-9-amd64
|
Security for cannon 0.0.80
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.