# File lib/net/ssh/key_factory.rb, line 37
      def load_private_key(filename, passphrase=nil)
        file = File.read(File.expand_path(filename))

        if file.match(/-----BEGIN DSA PRIVATE KEY-----/)
          key_type = OpenSSL::PKey::DSA
        elsif file.match(/-----BEGIN RSA PRIVATE KEY-----/)
          key_type = OpenSSL::PKey::RSA
        elsif file.match(/-----BEGIN (.*) PRIVATE KEY-----/)
          raise OpenSSL::PKey::PKeyError, "not a supported key type '#{$1}'"
        else
          raise OpenSSL::PKey::PKeyError, "not a private key (#{filename})"
        end

        encrypted_key = file.match(/ENCRYPTED/)
        tries = 0

        begin
          return key_type.new(file, passphrase || 'invalid')
        rescue OpenSSL::PKey::RSAError, OpenSSL::PKey::DSAError => e
          if encrypted_key
            tries += 1
            if tries <= 3
              passphrase = prompt("Enter passphrase for #{filename}:", false)
              retry
            else
              raise
            end
          else
            raise
          end
        end
      end