code: def find_public_key(hint=None):
      
  
      if hint is None:
          hint = expanduser('~/.ssh/')
      else:
          if not exists(hint):
              raise PubkeyError("Can't find '{}'".format(hint))
  
      pubkeys = [f for f in os.listdir(hint) if f.endswith('.pub')]
      if len(pubkeys) == 0:
          raise PubkeyError("No public keys in '{}'".format(hint))
      elif len(pubkeys) > 1:
          got_key = False
          while not got_key:
              ans = click.prompt(
                  "Multiple public-keys found:\n" +
                  "\n".join(["  {}: {}".format(a, b)
                             for a, b in enumerate(pubkeys)]) +
                  "\nSend which one?"
              )
              try:
                  ans = int(ans)
                  if ans < 0 or ans >= len(pubkeys):
                      ans = None
                  else:
                      got_key = True
                      with open(join(hint, pubkeys[ans]), 'r') as f:
                          pubkey = f.read()
  
              except Exception:
                  got_key = False
      else:
          with open(join(hint, pubkeys[0]), 'r') as f:
              pubkey = f.read()
      parts = pubkey.strip().split()
      kind = parts[0]
      keyid = 'unknown' if len(parts) <= 2 else parts[2]
  
      return kind, keyid, pubkey
docs: This looks for an appropriate SSH key to send, possibly querying
      the user in the meantime. DO NOT CALL after reactor.run as this
      (possibly) does blocking stuff like asking the user questions (via
      click.prompt())
  
      Returns a 3-tuple: kind, keyid, pubkey_data