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
intoExscript/tests/Exscript/protocols
andchmod 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9edf76a259b86f3583daacc120db17b9bc268a5dacf2ec99ff2c6eaeb0658a3 |
|
MD5 | 9471b6d179ae34ee6402eaa3c7ff2ca6 |
|
BLAKE2b-256 | 062be236809c880f4b642df9518675b2488c8ff0defb12e07b7bff4a35f12bc9 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ae84a4ecbbb118e9c0b7e41d38f08a68ab7b8fc15e5f2aefc4811377509a595 |
|
MD5 | 3027ef243e4cb4b89058c0c85ca30c39 |
|
BLAKE2b-256 | 08b61490651e4aef3d754dd180da857ad8ba2bd1af5ad7bbf430f64c6bb83177 |