"""Dell PowerConnect Driver.""" from paramiko import SSHClient import time from os import path from netmiko.cisco_base_connection import CiscoBaseConnection class SSHClient_noauth(SSHClient): def _auth(self, username, *args): self._transport.auth_none(username) return class DellPowerConnectBase(CiscoBaseConnection): """Dell PowerConnect Driver.""" def session_preparation(self): """Prepare the session after the connection has been established.""" self.ansi_escape_codes = True self._test_channel_read() self.set_base_prompt() self.enable() self.disable_paging(command="terminal datadump") # Clear the read buffer time.sleep(0.3 * self.global_delay_factor) self.clear_buffer() def set_base_prompt( self, pri_prompt_terminator=">", alt_prompt_terminator="#", delay_factor=1 ): """Sets self.base_prompt: used as delimiter for stripping of trailing prompt in output.""" prompt = super().set_base_prompt( pri_prompt_terminator=pri_prompt_terminator, alt_prompt_terminator=alt_prompt_terminator, delay_factor=delay_factor, ) prompt = prompt.strip() self.base_prompt = prompt return self.base_prompt def check_config_mode(self, check_string="(config)#"): """Checks if the device is in configuration mode""" return super().check_config_mode(check_string=check_string) def config_mode(self, config_command="config"): """Enter configuration mode.""" return super().config_mode(config_command=config_command) class DellPowerConnectSSH(DellPowerConnectBase): """Dell PowerConnect Driver. To make it work, we have to override the SSHClient _auth method. If we use login/password, the ssh server use the (none) auth mechanism. """ def _build_ssh_client(self): """Prepare for Paramiko SSH connection. See base_connection.py file for any updates. """ # Create instance of SSHClient object # If user does not provide SSH key, we use noauth if not self.use_keys: remote_conn_pre = SSHClient_noauth() else: remote_conn_pre = SSHClient() # Load host_keys for better SSH security if self.system_host_keys: remote_conn_pre.load_system_host_keys() if self.alt_host_keys and path.isfile(self.alt_key_file): remote_conn_pre.load_host_keys(self.alt_key_file) # Default is to automatically add untrusted hosts (make sure appropriate for your env) remote_conn_pre.set_missing_host_key_policy(self.key_policy) return remote_conn_pre def special_login_handler(self, delay_factor=1): """ Powerconnect presents with the following on login User Name: Password: **** """ delay_factor = self.select_delay_factor(delay_factor) i = 0 time.sleep(delay_factor * 0.5) output = "" while i <= 12: output = self.read_channel() if output: if "User Name:" in output: self.write_channel(self.username + self.RETURN) elif "Password:" in output: self.write_channel(self.password + self.RETURN) break time.sleep(delay_factor * 1) else: self.write_channel(self.RETURN) time.sleep(delay_factor * 1.5) i += 1 class DellPowerConnectTelnet(DellPowerConnectBase): """Dell PowerConnect Telnet Driver.""" pass