diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..c6a4088 --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +requests = "*" + +[dev-packages] + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..6c82f11 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,57 @@ +{ + "_meta": { + "hash": { + "sha256": "0fd749b30be70c938b01b5bf9e870b04e9c3648dea04f51a2feb9da5ac5a8f8c" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", + "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae" + ], + "version": "==2019.3.9" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "requests": { + "hashes": [ + "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", + "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + ], + "index": "pypi", + "version": "==2.22.0" + }, + "urllib3": { + "hashes": [ + "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", + "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232" + ], + "version": "==1.25.3" + } + }, + "develop": {} +} diff --git a/ungleich b/ungleich index edc559a..34d86cf 100755 --- a/ungleich +++ b/ungleich @@ -6,8 +6,9 @@ from ungleich_dns import ungleichDNS from ungleich_ripe import ungleichRIPE from ungleich_account import Account_Create from ungleich_weather import ungleichWeather +from ungleich_ssh_key import SSHKey -VERSION = "0.0.3" +VERSION = "0.0.4" class ungleichCLI(object): def __init__(self): @@ -17,6 +18,7 @@ class ungleichCLI(object): dns = ungleichDNS(self.parser, self.parser_parents) ripe = ungleichRIPE(self.parser, self.parser_parents) ripe = Account_Create(self.parser, self.parser_parents) + SSHKey(self.parser, self.parser_parents) ungleichWeather(self.parser, self.parser_parents) def _init_parser(self): diff --git a/ungleich_ssh_key.py b/ungleich_ssh_key.py new file mode 100644 index 0000000..5f54c95 --- /dev/null +++ b/ungleich_ssh_key.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +import os +import sys +import subprocess + +class SSHKey(object): + def __init__(self, parser, parents): + self.parser = parser + + self.parser['sshkey'] = self.parser['sub'].add_parser( + 'sshkey', + help="Manage SSH keys", + parents=[parents]) + + self.parser['sshkey'].add_argument('--user', + help='Username on the host', + required=False, + default="root") + self.parser['sshkey'].add_argument('--key', + help='Name of the key', + required=True) + self.parser['sshkey'].add_argument('--key-dir', + help='Directory holding keys', + default=os.path.join(os.environ['HOME'], "vcs/ungleich-ssh-keys/"), + required=false) + self.parser['sshkey'].add_argument('--host', + help='Host to use', + required=True) + self.parser['sshkey'].add_argument('--delete', + help='Delete key instead of adding', + action="store_true") + self.parser['sshkey'].set_defaults(func=self._manage_key) + + + def _manage_key(self, args): + if args.delete: + print("Not yet supported to delete, sorry :-)") + sys.exit(1) + + keyfile = os.path.join(args.keydir, "{}.pub".format(args.key)) + + if not os.path.exists(keyfile): + print("Key for {} does not exist in {}. Aborting".format(args.key, args.keydir)) + sys.exit(1) + + cmd = 'cat {} | ssh {} "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"'.format(keyfile, args.host) + + subprocess.run(cmd, shell=True)