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
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 | |
|---|---|---|---|
| cannon-0.0.80.tar.gz | 25.9 kB | 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
|