#!/usr/bin/python ## ssh-known-hosts-sort : v0.1 ## http://devsec.org/software/misc/ ## ssh-known-hosts-sort can sort/group your ssh2 known_hosts pubkeys ## ## I use it like this: ## ## ./ssh-known-hosts-sort < ~/.ssh/known_hosts > ~/.ssh/known_hosts.tmp \ ## && mv -f ~/.ssh/known_hosts.tmp ~/.ssh/known_hosts ## ## - Thor Kooda ## 2007-01-30 import sys pubkeys = {} for line in sys.stdin: line = line.strip() if line[0] == "#" or line == "\n": continue try: hostnames, bits, exponent = line.split(" ",3) except ValueError: print >> sys.stderr, "warning: invalid line:", line , continue if not exponent in pubkeys: pubkeys[exponent] = {} pubkeys[exponent]["hostnames"] = hostnames.lower().split(",") pubkeys[exponent]["bits"] = bits else: for hostname in hostnames.split(","): if hostname not in pubkeys[exponent]["hostnames"]: pubkeys[exponent]["hostnames"].append( hostname ) publist = [] for exponent in pubkeys: # sort hostnames for each pubkey pubkeys[exponent]["hostnames"].sort() publist.append( ( ",".join( pubkeys[exponent]["hostnames"] ), pubkeys[exponent]["bits"], exponent ) ) # sort pubkeys by previously sorted hostnames publist.sort() # print pubkeys for pubkey in publist: print " ".join( pubkey )