class Net::SSH::Authentication::Methods::KeyboardInteractive
Implements the “keyboard-interactive” SSH authentication method.
def authenticate(next_service, username, password=nil)
def authenticate(next_service, username, password=nil) debug { "trying keyboard-interactive" } send_message(userauth_request(username, next_service, "keyboard-interactive", "", "")) loop do message = session.next_message case message.type when USERAUTH_SUCCESS debug { "keyboard-interactive succeeded" } return true when USERAUTH_FAILURE debug { "keyboard-interactive failed" } raise Net::SSH::Authentication::DisallowedMethod unless message[:authentications].split(/,/).include? 'keyboard-interactive' return false when USERAUTH_INFO_REQUEST name = message.read_string instruction = message.read_string debug { "keyboard-interactive info request" } unless password puts(name) unless name.empty? puts(instruction) unless instruction.empty? end lang_tag = message.read_string responses =[] message.read_long.times do text = message.read_string echo = message.read_bool responses << (password || prompt(text, echo)) end # if the password failed the first time around, don't try # and use it on subsequent requests. password = nil msg = Buffer.from(:byte, USERAUTH_INFO_RESPONSE, :long, responses.length, :string, responses) send_message(msg) else raise Net::SSH::Exception, "unexpected reply in keyboard interactive: #{message.type} (#{message.inspect})" end end end