:py:mod:`airflow.providers.ssh.hooks.ssh`
=========================================

.. py:module:: airflow.providers.ssh.hooks.ssh

.. autoapi-nested-parse::

   Hook for SSH connections.



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.ssh.hooks.ssh.SSHHook




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.ssh.hooks.ssh.TIMEOUT_DEFAULT


.. py:data:: TIMEOUT_DEFAULT
   :annotation: = 10

   

.. py:class:: SSHHook(ssh_conn_id = None, remote_host = '', username = None, password = None, key_file = None, port = None, timeout = None, conn_timeout = None, keepalive_interval = 30, banner_timeout = 30.0, disabled_algorithms = None, ciphers = None)

   Bases: :py:obj:`airflow.hooks.base.BaseHook`

   Hook for ssh remote execution using Paramiko.
   ref: https://github.com/paramiko/paramiko
   This hook also lets you create ssh tunnel and serve as basis for SFTP file transfer

   :param ssh_conn_id: :ref:`ssh connection id<howto/connection:ssh>` from airflow
       Connections from where all the required parameters can be fetched like
       username, password or key_file. Thought the priority is given to the
       param passed during init
   :param remote_host: remote host to connect
   :param username: username to connect to the remote_host
   :param password: password of the username to connect to the remote_host
   :param key_file: path to key file to use to connect to the remote_host
   :param port: port of remote host to connect (Default is paramiko SSH_PORT)
   :param conn_timeout: timeout (in seconds) for the attempt to connect to the remote_host.
       The default is 10 seconds. If provided, it will replace the `conn_timeout` which was
       predefined in the connection of `ssh_conn_id`.
   :param timeout: (Deprecated). timeout for the attempt to connect to the remote_host.
       Use conn_timeout instead.
   :param keepalive_interval: send a keepalive packet to remote host every
       keepalive_interval seconds
   :param banner_timeout: timeout to wait for banner from the server in seconds
   :param disabled_algorithms: dictionary mapping algorithm type to an
       iterable of algorithm identifiers, which will be disabled for the
       lifetime of the transport
   :param ciphers: list of ciphers to use in order of preference

   .. py:attribute:: conn_name_attr
      :annotation: = ssh_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = ssh_default

      

   .. py:attribute:: conn_type
      :annotation: = ssh

      

   .. py:attribute:: hook_name
      :annotation: = SSH

      

   .. py:method:: get_ui_field_behaviour()
      :staticmethod:

      Returns custom field behaviour


   .. py:method:: host_proxy()


   .. py:method:: get_conn()

      Opens a ssh connection to the remote host.

      :rtype: paramiko.client.SSHClient


   .. py:method:: __enter__()


   .. py:method:: __exit__(exc_type, exc_val, exc_tb)


   .. py:method:: get_tunnel(remote_port, remote_host = 'localhost', local_port = None)

      Creates a tunnel between two hosts. Like ssh -L <LOCAL_PORT>:host:<REMOTE_PORT>.

      :param remote_port: The remote port to create a tunnel to
      :param remote_host: The remote host to create a tunnel to (default localhost)
      :param local_port:  The local port to attach the tunnel to

      :return: sshtunnel.SSHTunnelForwarder object


   .. py:method:: create_tunnel(local_port, remote_port, remote_host = 'localhost')

      Creates tunnel for SSH connection [Deprecated].

      :param local_port: local port number
      :param remote_port: remote port number
      :param remote_host: remote host
      :return:


   .. py:method:: exec_ssh_client_command(ssh_client, command, get_pty, environment, timeout)



