#!/usr/bin/env python3 # Copyright Anton Semjonov, Licensed under GPL-3.0 from argparse import ArgumentParser, FileType from tinyssh_keyconvert import opensshkey, readwritekey # attempt to read version try: from tinyssh_keyconvert.__version__ import __version__ except ImportError: __version__ = "development" parser = ArgumentParser( description="Convert OpenSSH ed5519/ecdsa-nistp256 secretkeys to binary format for TinySSH.", epilog="%(prog)s Version " + str(__version__), ) # be verbose parser.add_argument("-v", "--verbose", help="be verbose", action="store_true") # input file: an OpenSSH key group_input = parser.add_argument_group("input") group_input.add_argument("key", type=FileType("r"), help="openssh secret key") # outputs group: what to do with the key group_output = parser.add_argument_group("output") group_output.add_argument("-j", "--json", help="output a json representation to stdout", action="store_true") group_output.add_argument( "-d", "--dir", help="directory to write tinyssh key files to", default=readwritekey.TINYSSH_KEYDIR ) group_output.add_argument("-f", "--force", help="overwrite existing files", action="store_true") group_output.add_argument("-n", "--dry-run", help="do not write keys, only parse", action="store_true") # parse commandline args = parser.parse_args() # disable traceback if not verbose if not args.verbose: import sys sys.tracebacklimit = 0 # read key keybuf = readwritekey.read_openssh_v1_key(args.key) # parse key key = opensshkey.OpenSSHKey(keybuf) if args.verbose: print("Successfully read %s key (%s)." % (key.type, key.comment)) # print key if args.json: print(key.json(indent=2)) # write key if not args.dry_run: readwritekey.write_tinyssh_keys(key, args.force, args.dir) if args.verbose: print("Wrote tinyssh keys to %s." % args.dir)