コード例 #1
0
        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);
        }