class Net::SSH::Authentication::Methods::Password

Implements the “password” SSH authentication method.

Constants

NUMBER_OF_PASSWORD_PROMPTS

Public Instance Methods

authenticate(next_service, username, password=nil) click to toggle source

Attempt to authenticate the given user for the given service. If the password parameter is nil, this will ask for password

# File lib/net/ssh/authentication/methods/password.rb, line 14
def authenticate(next_service, username, password=nil)
  clear_prompter!
  retries = 0
  max_retries = get_max_retries
  return false if !password && max_retries == 0

  begin
    password_to_send = password || ask_password(username)

    send_message(userauth_request(username, next_service, "password", false, password_to_send))
    message = session.next_message
    retries += 1

    if message.type == USERAUTH_FAILURE
      debug { "password failed" }

      raise Net::SSH::Authentication::DisallowedMethod unless
        message[:authentications].split(/,/).include? 'password'
      password = nil
    end
  end until (message.type != USERAUTH_FAILURE || retries >= max_retries)

  case message.type
  when USERAUTH_SUCCESS
    debug { "password succeeded" }
    @prompter.success if @prompter
    return true
  when USERAUTH_FAILURE
    return false
  when USERAUTH_PASSWD_CHANGEREQ
    debug { "password change request received, failing" }
    return false
  else
    raise Net::SSH::Exception, "unexpected reply to USERAUTH_REQUEST: #{message.type} (#{message.inspect})"
  end
end