

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de una conexión SSH mediante `SSHOperator`
<a name="samples-ssh"></a>

El siguiente ejemplo describe cómo puede utilizar el `SSHOperator` en un gráfico acíclico dirigido (DAG) para conectarse a una instancia remota de Amazon EC2 desde su entorno Amazon Managed Workflows para Apache Airflow. Puede utilizar un enfoque similar para conectarse a cualquier instancia remota con acceso SSH.

En el siguiente ejemplo, se cargará una clave secreta SSH (`.pem`) en el directorio `dags` de su entorno en Amazon S3. A continuación, instale las dependencias necesarias mediante `requirements.txt` y cree una nueva conexión de Apache Airflow en la interfaz de usuario. Por último, escribe un DAG que crea una conexión SSH con la instancia remota.

**Topics**
+ [Versión](#samples-ssh-version)
+ [Requisitos previos](#samples-ssh-prereqs)
+ [Permisos](#samples-ssh-permissions)
+ [Requisitos](#samples-ssh-dependencies)
+ [Cómo copiar su clave secreta en Amazon S3](#samples-ssh-secret)
+ [Creación de una nueva conexión con Apache Airflow](#samples-ssh-connection)
+ [Código de ejemplo](#samples-ssh-code)

## Versión
<a name="samples-ssh-version"></a>

Puede usar el código de ejemplo que aparece en esta página con **Apache Airflow v2** en [Python 3.10](https://peps.python.org/pep-0619/) y **Apache Airflow v3** en [Python 3.11](https://peps.python.org/pep-0664/).

## Requisitos previos
<a name="samples-ssh-prereqs"></a>

Para usar el código de muestra de esta página, necesitará lo siguiente:
+ Un [entorno de Amazon MWAA](get-started.md).
+ Una clave secreta de SSH. En el código de muestra se supone que tiene una instancia de Amazon EC2 y una `.pem` en la misma región que su entorno de Amazon MWAA. Si no tiene una clave SSH, consulte [Crear o importar un par de claves](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair) en la *guía del usuario de Amazon EC2*.

## Permisos
<a name="samples-ssh-permissions"></a>

No se necesitan permisos adicionales para usar el código de ejemplo de esta página.

## Requisitos
<a name="samples-ssh-dependencies"></a>

Añada el siguiente parámetro a `requirements.txt` para instalar el paquete `apache-airflow-providers-ssh` en el servidor web. Una vez que su entorno se actualice y Amazon MWAA instale correctamente la dependencia, verá un nuevo tipo de conexión **SSH** en la UI.

```
-c https://raw.githubusercontent.com/apache/airflow/constraints-Airflow-version/constraints-Python-version.txt
apache-airflow-providers-ssh
```

**nota**  
`-c` define la URL de las restricciones en `requirements.txt`. Esto garantiza que Amazon MWAA instale la versión de paquete correcta para su entorno.

## Cómo copiar su clave secreta en Amazon S3
<a name="samples-ssh-secret"></a>

Utilice el siguiente comando de la AWS Command Line Interface para copiar la clave `.pem` en el directorio `dags` de su entorno en Amazon S3.

```
aws s3 cp your-secret-key.pem s3://amzn-s3-demo-bucket/dags/
```

Amazon MWAA copia el contenido en `dags`, incluida la clave `.pem`, en el directorio local `/usr/local/airflow/dags/`. De este modo, Apache Airflow puede acceder a la clave.

## Creación de una nueva conexión con Apache Airflow
<a name="samples-ssh-connection"></a>

**Creación de una nueva conexión SSH mediante la interfaz de usuario de Apache Airflow**

1. Abra la página [Entornos](https://console.aws.amazon.com/mwaa/home#/environments) en la consola de Amazon MWAA.

1. En la lista de entornos, elija **Abrir la interfaz de usuario de Airflow** para su entorno.

1. En la página de UI de Apache Airflow, seleccione **Admin** (Administrador) en la barra de navegación superior para ampliar la lista desplegable y, a continuación, seleccione **Connections** (Conexiones).

1. En la página **Listar conexiones**, seleccione **\$1** o el botón **Añadir un nuevo registro** para añadir una nueva conexión.

1. En la página **Conectar a AD**, proporcione la siguiente información:

   1. En **Nombre de conexión** introduzca **ssh\$1new**.

   1. Para el **tipo de conexión**, seleccione **SSH** en la lista desplegable.
**nota**  
Si el tipo de conexión **SSH** no está disponible en la lista, Amazon MWAA no ha instalado el paquete `apache-airflow-providers-ssh` necesario. Actualice el archivo `requirements.txt` para incluir este paquete e inténtelo de nuevo.

   1. Para **Host**, introduzca la dirección IP de la instancia de Amazon EC2 a la que desee conectarse. Por ejemplo, **12.345.67.89**.

   1. En **Nombre de usuario**, introduzca **ec2-user** si se está conectando a una instancia de Amazon EC2. Su nombre de usuario puede ser diferente, según el tipo de instancia remota a la que desee que se conecte Apache Airflow.

   1. Para **Extra**, introduzca el siguiente par clave-valor en formato JSON:

      ```
      { "key_file": "/usr/local/airflow/dags/your-secret-key.pem" }
      ```

      Este par clave-valor indica a Apache Airflow que busque la clave secreta en el directorio local `/dags`.

## Código de ejemplo
<a name="samples-ssh-code"></a>

El siguiente DAG utiliza `SSHOperator` para conectarse a la instancia de Amazon EC2 de destino y, a continuación, ejecuta el comando de Linux `hostname` para imprimir el nombre de la instancia. Puede modificar el DAG para ejecutar cualquier comando o script en la instancia remota.

1. Abra una terminal y navegue hasta el directorio en el que está almacenado el código del DAG. Por ejemplo:

   ```
   cd dags
   ```

1. Copie el contenido del código de ejemplo siguiente y guárdelo localmente como `ssh.py`.

   ```
   from airflow.decorators import dag
   from datetime import datetime
   from airflow.providers.ssh.operators.ssh import SSHOperator
   
   @dag(
       dag_id="ssh_operator_example",
       schedule_interval=None,     
       start_date=datetime(2022, 1, 1),
       catchup=False,
       )
   def ssh_dag():
       task_1=SSHOperator(
           task_id="ssh_task",
           ssh_conn_id='ssh_new',
           command='hostname',
       )
   
   my_ssh_dag = ssh_dag()
   ```

1.  Ejecute el siguiente comando de la AWS CLI para copiar el DAG en el bucket de su entorno y, a continuación, active el DAG mediante la interfaz de usuario de Apache Airflow. 

   ```
   aws s3 cp your-dag.py s3://your-environment-bucket/dags/
   ```

1. Si se ejecuta correctamente, verá un resultado similar al siguiente en los registros de tareas del `ssh_task` en el DAG `ssh_operator_example`:

   ```
   [2022-01-01, 12:00:00 UTC] {{base.py:79}} INFO - Using connection to: id: ssh_new. Host: 12.345.67.89, Port: None,
   Schema: , Login: ec2-user, Password: None, extra: {'key_file': '/usr/local/airflow/dags/your-secret-key.pem'}
   [2022-01-01, 12:00:00 UTC] {{ssh.py:264}} WARNING - Remote Identification Change is not verified. This won't protect against Man-In-The-Middle attacks [2022-01-01, 12:00:00 UTC] {{ssh.py:270}} WARNING - No Host Key Verification. This won't protect against Man-In-The-Middle attacks 
   [2022-01-01, 12:00:00 UTC] {{transport.py:1819}} INFO - Connected (version 2.0, client OpenSSH_7.4) 
   [2022-01-01, 12:00:00 UTC] {{transport.py:1819}} INFO - Authentication (publickey) successful!
   [2022-01-01, 12:00:00 UTC] {{ssh.py:139}} INFO - Running command: hostname
   [2022-01-01, 12:00:00 UTC]{{ssh.py:171}} INFO - ip-123-45-67-89.us-west-2.compute.internal
   [2022-01-01, 12:00:00 UTC] {{taskinstance.py:1280}} INFO - Marking task as SUCCESS. dag_id=ssh_operator_example, task_id=ssh_task, execution_date=20220712T200914, start_date=20220712T200915, end_date=20220712T200916
   ```