diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index e0be0b79e52c997c6059767b98a5eaa16fb02c8d..ad3d2d8999bee63f5b49f364b2863ce6853d7145 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -316,85 +316,6 @@ def _BuildInstanceHookEnvByObject(instance, override=None):
   return _BuildInstanceHookEnv(**args)
 
 
-def _UpdateKnownHosts(fullnode, ip, pubkey):
-  """Ensure a node has a correct known_hosts entry.
-
-  Args:
-    fullnode - Fully qualified domain name of host. (str)
-    ip       - IPv4 address of host (str)
-    pubkey   - the public key of the cluster
-
-  """
-  if os.path.exists(constants.SSH_KNOWN_HOSTS_FILE):
-    f = open(constants.SSH_KNOWN_HOSTS_FILE, 'r+')
-  else:
-    f = open(constants.SSH_KNOWN_HOSTS_FILE, 'w+')
-
-  inthere = False
-
-  save_lines = []
-  add_lines = []
-  removed = False
-
-  for rawline in f:
-    logger.Debug('read %s' % (repr(rawline),))
-
-    parts = rawline.rstrip('\r\n').split()
-
-    # Ignore unwanted lines
-    if len(parts) >= 3 and not rawline.lstrip()[0] == '#':
-      fields = parts[0].split(',')
-      key = parts[2]
-
-      haveall = True
-      havesome = False
-      for spec in [ ip, fullnode ]:
-        if spec not in fields:
-          haveall = False
-        if spec in fields:
-          havesome = True
-
-      logger.Debug("key, pubkey = %s." % (repr((key, pubkey)),))
-      if haveall and key == pubkey:
-        inthere = True
-        save_lines.append(rawline)
-        logger.Debug("Keeping known_hosts '%s'." % (repr(rawline),))
-        continue
-
-      if havesome and (not haveall or key != pubkey):
-        removed = True
-        logger.Debug("Discarding known_hosts '%s'." % (repr(rawline),))
-        continue
-
-    save_lines.append(rawline)
-
-  if not inthere:
-    add_lines.append('%s,%s ssh-rsa %s\n' % (fullnode, ip, pubkey))
-    logger.Debug("Adding known_hosts '%s'." % (repr(add_lines[-1]),))
-
-  if removed:
-    save_lines = save_lines + add_lines
-
-    # Write a new file and replace old.
-    fd, tmpname = tempfile.mkstemp('.tmp', 'known_hosts.',
-                                   constants.DATA_DIR)
-    newfile = os.fdopen(fd, 'w')
-    try:
-      newfile.write(''.join(save_lines))
-    finally:
-      newfile.close()
-    logger.Debug("Wrote new known_hosts.")
-    os.rename(tmpname, constants.SSH_KNOWN_HOSTS_FILE)
-
-  elif add_lines:
-    # Simply appending a new line will do the trick.
-    f.seek(0, 2)
-    for add in add_lines:
-      f.write(add)
-
-  f.close()
-
-
 def _HasValidVG(vglist, vgname):
   """Checks if the volume group list is valid.
 
@@ -607,9 +528,6 @@ class LUInitCluster(LogicalUnit):
     sshkey = sshline.split(" ")[1]
 
     _AddHostToEtcHosts(hostname.name)
-
-    _UpdateKnownHosts(hostname.name, hostname.ip, sshkey)
-
     _InitSSHSetup(hostname.name)
 
     # init of cluster config file
@@ -618,6 +536,8 @@ class LUInitCluster(LogicalUnit):
                     sshkey, self.op.mac_prefix,
                     self.op.vg_name, self.op.def_bridge)
 
+    ssh.WriteKnownHostsFile(cfgw, ss, constants.SSH_KNOWN_HOSTS_FILE)
+
 
 class LUDestroyCluster(NoHooksLU):
   """Logical unit for destroying the cluster.
@@ -1596,9 +1516,6 @@ class LUAddNode(LogicalUnit):
     # Add node to our /etc/hosts, and add key to known_hosts
     _AddHostToEtcHosts(new_node.name)
 
-    _UpdateKnownHosts(new_node.name, new_node.primary_ip,
-                      self.cfg.GetHostKey())
-
     if new_node.secondary_ip != new_node.primary_ip:
       if not rpc.call_node_tcp_ping(new_node.name,
                                     constants.LOCALHOST_IP_ADDRESS,