+args = {}
+args['known_hosts'] = "/home/soltesz/.ssh/known_hosts"
+
+class SSHKnownHosts:
+ def __init__(self, args = args):
+ self.args = args
+ self.read_knownhosts()
+
+ def _split_kh_entry(self, line):
+ s = line.split(' ')
+ try:
+ (host,ip) = s[0].split(',')
+ except:
+ ip = s[0]
+ host = ""
+
+ key = ' '.join(s[1:3])
+ comment = ' '.join(s[3:])
+ return (host, ip, key, comment)
+
+ def _get_index(self, host, ip):
+ index = ""
+ if host is not "":
+ index = "%s,%s" % (host,ip)
+ else:
+ index = ip
+ return index
+
+ def read_knownhosts(self):
+ kh_read = open(self.args["known_hosts"], 'r')
+ self.pl_keys = {}
+ self.other_keys = {}
+ for line in kh_read:
+ (host, ip, key, comment) = self._split_kh_entry(line[:-1])
+ rec = { self._get_index(host, ip) : "%s %s" % (key, comment) }
+ if 'PlanetLab' in comment:
+ self.pl_keys.update(rec)
+ else:
+ self.other_keys.update(rec)
+
+ #for i in self.pl_keys:
+ # print i
+ # print self.pl_keys[i]
+
+ return
+
+ def write(self):
+ self.write_knownhosts()
+
+ def write_knownhosts(self):
+ f = open(self.args['known_hosts'], 'w')
+ for index in self.pl_keys:
+ print >>f, "%s %s" % (index, self.pl_keys[index])
+ for index in self.other_keys:
+ print >>f, "%s %s" % (index, self.other_keys[index])
+ f.close()
+
+ def updateAll(self):
+ l_nodes = plc.getNodes()
+ d_nodes = {}
+ nokey_list = []
+ for node in l_nodes:
+ name = node['hostname']
+ d_nodes[name] = node
+
+ for host in d_nodes:
+ node = d_nodes[host]
+ (host, ip, key, comment) = self._record_from_node(node, nokey_list)
+ rec = { "%s,%s" % (host,ip) : "%s %s" % (key, comment) }
+ self.pl_keys.update(rec)
+
+ return nokey_list