#!/usr/bin/env python# WARNING# This script completely destroys your ~/.ssh/authorized_keys# file every time it is run# WARNINGimport sysimport osimport os.pathimport rulesetimport subprocessif len(sys.argv) != 2: sys.stderr.write("refresh-auth: wrong number of arguments (%s)\n" % sys.argv) sys.exit(-1)wrappercommand = sys.argv[1]akeyfile = os.path.expanduser("~/.ssh/authorized_keys")akeys = open(akeyfile + "_new", "w")for root, dirs, files in os.walk("keys"): for fn in files: ffn = os.path.join(root, fn) if not ruleset.goodpath(ffn): # ignore any path that contains dodgy characters continue keyname = ffn[5:] prefix=('command="%s",no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding' % ('%s %s' % (wrappercommand, keyname))) p = subprocess.Popen(("ssh-keygen", "-i", "-f", ffn), stdout=subprocess.PIPE, stderr=subprocess.PIPE) newkey = p.communicate()[0] if p.wait() == 0: klines = [l.strip() for l in newkey.split("\n")] else: # Conversion failed, read it directly. kf = open(ffn) try: klines = [l.strip() for l in kf] finally: kf.close() for l in klines: if len(l): akeys.write("%s %s\n" % (prefix, l))akeys.close()os.rename(akeyfile + "_new", akeyfile)