53: def authenticate(next_service, username, password=nil)
54: debug { "beginning authentication of `#{username}'" }
55:
56: transport.send_message(transport.service_request("ssh-userauth"))
57: message = expect_message(SERVICE_ACCEPT)
58:
59: key_manager = KeyManager.new(logger, options)
60: keys.each { |key| key_manager.add(key) } unless keys.empty?
61: key_data.each { |key2| key_manager.add_key_data(key2) } unless key_data.empty?
62:
63: attempted = []
64:
65: @auth_methods.each do |name|
66: begin
67: next unless @allowed_auth_methods.include?(name)
68: attempted << name
69:
70: debug { "trying #{name}" }
71: method = Methods.const_get(name.split(/\W+/).map { |p| p.capitalize }.join).new(self, :key_manager => key_manager)
72:
73: return true if method.authenticate(next_service, username, password)
74: rescue Net::SSH::Authentication::DisallowedMethod
75: end
76: end
77:
78: error { "all authorization methods failed (tried #{attempted.join(', ')})" }
79: return false
80: ensure
81: key_manager.finish if key_manager
82: end