diff --git a/netmiko/mikrotik/mikrotik_ssh.py b/netmiko/mikrotik/mikrotik_ssh.py index 7822dd3b4..a34c86aed 100644 --- a/netmiko/mikrotik/mikrotik_ssh.py +++ b/netmiko/mikrotik/mikrotik_ssh.py @@ -26,22 +26,37 @@ def special_login_handler(self, delay_factor: float = 1.0) -> None: Special cases: Mikrotik might prompt to read software licenses before displaying the initial prompt. Mikrotik might also prompt for acknowledging no software key message if unlicensed. + Mikrotik might present a "default config" screen. + Mikrotik might ask for a new password. """ no_license_message = 'Please press "Enter" to continue!' license_prompt = "Do you want to see the software license" + new_password_promt = "new password>" + default_config_prompt = 'remove this default configuration type "r"' combined_pattern = ( - rf"(?:{self.prompt_pattern}|{no_license_message}|{license_prompt})" + rf"(?:{self.prompt_pattern}|{no_license_message}|{license_prompt}|{new_password_promt}|{default_config_prompt})" ) data = self.read_until_pattern(pattern=combined_pattern, re_flags=re.I) - if no_license_message in data: - # Handle "no license" message - self.write_channel(self.RETURN) - self.read_until_pattern(pattern=self.prompt_pattern) - elif license_prompt in data: - # Handle software license prompt - self.write_channel("n") - self.read_until_pattern(pattern=self.prompt_pattern) + for i in range(1,15): + if no_license_message in data: + # Handle "no license" message + self.write_channel(self.RETURN) + data = self.read_until_pattern(pattern=combined_pattern, re_flags=re.I) + elif license_prompt in data: + # Handle software license prompt + self.write_channel("n") + data = self.read_until_pattern(pattern=combined_pattern, re_flags=re.I) + elif default_config_prompt in data: + # Handle default config notice + self.write_channel("\n") + data = self.read_until_pattern(pattern=combined_pattern, re_flags=re.I) + elif new_password_promt in data: + # Handle new password request + self.write_channel('\x03') + data = self.read_until_pattern(pattern=combined_pattern, re_flags=re.I) + else: # must have matched the regular promt + break def session_preparation(self, *args: Any, **kwargs: Any) -> None: """Prepare the session after the connection has been established."""