<!--

Welcome to Apache Airflow!  For a smooth issue process, try to answer the following questions.
Don't worry if they're not all applicable; just try to include what you can :-)

If you need to include code snippets or logs, please put them in fenced code
blocks.  If they're super-long, please use the details tag like
<details><summary>super-long log</summary> lots of stuff </details>

Please delete these comment blocks before submitting the issue.

-->

**Description**

I want to specify the cipher to use when creating a SftpHook. Currently this is not possible because there is not a way to propagate the value to CnOpts. 

https://github.com/apache/airflow/blob/master/airflow/providers/sftp/hooks/sftp.py
https://pysftp.readthedocs.io/en/release_0.2.9/pysftp.html?#pysftp.CnOpts
https://pysftp.readthedocs.io/en/release_0.2.9/cookbook.html

**Use case / motivation**

<!-- What do you want to happen?

Rather than telling us how you might implement this solution, try to take a
step back and describe what you are trying to achieve.

-->

I want to be able to access SFTP servers that have disabled access from connection with weak ciphers.

airflow/providers/sftp/hooks/sftp.py
return False
        return True
    def get_tree_map(
        self, path: str, prefix: Optional[str] = None, delimiter: Optional[str] = None
    ) -> Tuple[List[str], List[str], List[str]]:
        """
        Return tuple with recursive lists of files, directories and unknown paths from given path.
        It is possible to filter results by giving prefix and/or delimiter parameters.
        :param path: path from which tree will be built
        :type path: str
        :param prefix: if set paths will be added if start with prefix
        :type prefix: str
        :param delimiter: if set paths will be added if end with delimiter
        :type delimiter: str
        :return: tuple with list of files, dirs and unknown items
        :rtype: Tuple[List[str], List[str], List[str]]
        """
        conn = self.get_conn()
        files, dirs, unknowns = [], [], []  
        def append_matching_path_callback(list_):
            return lambda item: list_.append(item) if self._is_path_match(item, prefix, delimiter) else None
        conn.walktree(
            remotepath=path,
            fcallback=append_matching_path_callback(files),
            dcallback=append_matching_path_callback(dirs),
            ucallback=append_matching_path_callback(unknowns),
            recurse=True,
        )
        return files, dirs, unknowns