public List <SshPublicKey> GetUserPublicKeys(string userPublicKeyDir) { Log.Write(""); var list = new List <SshPublicKey>(); string[] files; try { files = Directory.GetFiles(userPublicKeyDir); } catch (Exception) { Log.Write(LogColor.Important, "Unable to access user public key directory '{0}'.", userPublicKeyDir); return(list); } for (int i = 0; i < files.Length; i++) { string file = files[i]; try { SshPublicKey key; switch (Path.GetExtension(file).ToLowerInvariant()) { case ".pub": case ".key": key = new SshPublicKey(file); Log.Write("User public key '{0}' loaded.\r\nFingerprint: {1}", file, key.Fingerprint.ToString(SignatureHashAlgorithm.MD5)); list.Add(key); break; case ".der": case ".cer": case ".crt": var certificate = Certificate.LoadDer(file); key = new SshPublicKey(certificate); Log.Write("User public key '{0}' loaded.\r\nFingerprint: {1}", file, key.Fingerprint.ToString(SignatureHashAlgorithm.MD5)); list.Add(key); break; case "": if (Path.GetFileName(file) != "authorized_keys") { goto default; } var keys = SshPublicKey.LoadPublicKeys(file); if (keys.Length > 0) { Log.Write("User public keys '{0}' loaded.", file); foreach (var item in keys) { Log.Write("Fingerprint: {0}", item.Fingerprint.ToString(SignatureHashAlgorithm.MD5)); } list.AddRange(keys); } break; default: Log.Write(LogColor.Important, "User public key '{0}' file extension is unknown.", file); Log.Write(LogColor.Info, "Supported extensions for SSH public keys: '*.pub', '*.key'."); Log.Write(LogColor.Info, "Supported extensions for X509 certificates: '*.der', '*.cer', '*.crt'."); Log.Write(LogColor.Info, "Supported file name for ~/.ssh/authorized_keys file format: 'authorized_keys'."); continue; } } catch (Exception x) { Log.Write(LogColor.Important, "User public key '{0}' could not be loaded: {1}", file, x.Message); } } return(list); }