Пример #1
0
    def get_remote(self, ip, port=22):
        """ Function returns remote SSH connection to node by ip address

        :param ip: IP of host
        :param port: port for SSH
        :return: SSHClient
        """
        if (ip, port) not in self.connections:
            logger.debug('SSH_MANAGER:Create new connection for '
                         '{ip}:{port}'.format(ip=ip, port=port))

            keys = self._get_keys() if ip != self.admin_ip else []
            if ip == self.admin_ip:
                username = self.admin_login
                password = self.__admin_password
            else:
                username = self.slave_login
                password = self.__slave_password

            ssh_client = SSHClient(
                host=ip,
                port=port,
                username=username,
                password=password,
                private_keys=keys
            )

            if ip != self.admin_ip:
                ssh_client.sudo_mode = True
            self.connections[(ip, port)] = ssh_client
        logger.debug('SSH_MANAGER:Return existed connection for '
                     '{ip}:{port}'.format(ip=ip, port=port))
        logger.debug('SSH_MANAGER: Connections {0}'.format(self.connections))
        return self._connect(self.connections[(ip, port)])
Пример #2
0
    def update_connection(self,
                          ip,
                          login=None,
                          password=None,
                          keys=None,
                          port=22):
        """Update existed connection

        :param ip: host ip string
        :param login: login string
        :param password: password string
        :param keys: list of keys
        :param port: ssh port int
        :return: None
        """
        if (ip, port) in self.connections:
            logger.info('SSH_MANAGER:Close connection for {ip}:{port}'.format(
                ip=ip, port=port))
            self.connections[(ip, port)].clear()
            logger.info('SSH_MANAGER:Create new connection for '
                        '{ip}:{port}'.format(ip=ip, port=port))

            self.connections[(ip, port)] = SSHClient(
                host=ip,
                port=port,
                username=login,
                password=password,
                private_keys=keys if keys is not None else [])
Пример #3
0
    def get_remote(self, ip, port=22):
        """ Function returns remote SSH connection to node by ip address

        :param ip: IP of host
        :param port: port for SSH
        :return: SSHClient
        """
        if (ip, port) not in self.connections:
            logger.debug('SSH_MANAGER:Create new connection for '
                         '{ip}:{port}'.format(ip=ip, port=port))

            keys = self._get_keys() if ip != self.admin_ip else []
            if ip == self.admin_ip:
                ssh_client = SSHClient(
                    host=ip,
                    port=port,
                    username=self.admin_login,
                    password=self.__admin_password,
                    private_keys=keys
                )
            else:
                try:
                    ssh_client = SSHClient(
                        host=ip,
                        port=port,
                        username=self.slave_login,
                        password=self.__slave_password,
                        private_keys=keys
                    )
                except BadAuthenticationType:
                    ssh_client = SSHClient(
                        host=ip,
                        port=port,
                        username=self.slave_fallback_login,
                        password=self.__slave_password,
                        private_keys=keys
                    )
                ssh_client.sudo_mode = True
            self.connections[(ip, port)] = ssh_client
        logger.debug('SSH_MANAGER:Return existed connection for '
                     '{ip}:{port}'.format(ip=ip, port=port))
        logger.debug('SSH_MANAGER: Connections {0}'.format(self.connections))
        return self._connect(self.connections[(ip, port)])
Пример #4
0
    def _get_remote(self, ip, port=22):
        """ Function returns remote SSH connection to node by ip address

        :param ip: IP of host
        :param port: port for SSH
        :return: SSHClient
        """
        if (ip, port) not in self.connections:
            logger.debug('SSH_MANAGER:Create new connection for '
                         '{ip}:{port}'.format(ip=ip, port=port))

            keys = self._get_keys() if ip != self.admin_ip else []

            self.connections[(ip, port)] = SSHClient(host=ip,
                                                     port=port,
                                                     username=self.login,
                                                     password=self.__password,
                                                     private_keys=keys)
        logger.debug('SSH_MANAGER:Return existed connection for '
                     '{ip}:{port}'.format(ip=ip, port=port))
        logger.debug('SSH_MANAGER: Connections {0}'.format(self.connections))
        return self._connect(self.connections[(ip, port)])