class Net::SSH::Authentication::Methods::Password
Implements the “password” SSH authentication method.
def ask_password(username)
def ask_password(username) host = session.transport.host prompt_info = { type: 'password', user: username, host: host } if @prompt_info != prompt_info @prompt_info = prompt_info @prompter = prompt.start(prompt_info) end echo = false @prompter.ask("#{username}@#{host}'s password:", echo) end
def authenticate(next_service, username, password = nil)
Attempt to authenticate the given user for the given service. If
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
def clear_prompter!
def clear_prompter! @prompt_info = nil @prompter = nil end
def get_max_retries
def get_max_retries options = session.transport.options || {} result = options[:number_of_password_prompts] || NUMBER_OF_PASSWORD_PROMPTS options[:non_interactive] ? 0 : result end