

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Creazione di una connessione SSH utilizzando `SSHOperator`
<a name="samples-ssh"></a>

L'esempio seguente descrive come utilizzare il `SSHOperator` in un grafo aciclico diretto (DAG) per connetterti a un' EC2 istanza Amazon remota dal tuo ambiente Amazon Managed Workflows for Apache Airflow. Puoi utilizzare un approccio simile per connetterti a qualsiasi istanza remota con accesso SSH.

Nell'esempio seguente, carichi una chiave segreta SSH (`.pem`) `dags` nella directory del tuo ambiente su Amazon S3. Quindi, installi le dipendenze necessarie utilizzando `requirements.txt` e creando una nuova connessione Apache Airflow nell'interfaccia utente. Infine, scrivi un DAG che crea una connessione SSH all'istanza remota.

**Topics**
+ [Versione](#samples-ssh-version)
+ [Prerequisiti](#samples-ssh-prereqs)
+ [Autorizzazioni](#samples-ssh-permissions)
+ [Requisiti](#samples-ssh-dependencies)
+ [Copia la tua chiave segreta su Amazon S3](#samples-ssh-secret)
+ [Creare una nuova connessione Apache Airflow](#samples-ssh-connection)
+ [Esempio di codice](#samples-ssh-code)

## Versione
<a name="samples-ssh-version"></a>

**[È possibile utilizzare l'esempio di codice in questa pagina con **Apache Airflow v2 in Python 3.10 e Apache Airflow v3**[in Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

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

Per utilizzare il codice di esempio in questa pagina, avrai bisogno di quanto segue:
+ Un ambiente [Amazon MWAA](get-started.md).
+ Una chiave segreta SSH. L'esempio di codice presuppone che tu abbia un' EC2 istanza Amazon e una `.pem` nella stessa regione del tuo ambiente Amazon MWAA. Se non disponi di una chiave, consulta la sezione [Creare o importare una coppia di chiavi](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair) nella *Amazon EC2 User Guide*.

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

Non sono necessarie autorizzazioni aggiuntive per utilizzare l'esempio di codice in questa pagina.

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

Aggiungi il seguente parametro per `requirements.txt` installare il `apache-airflow-providers-ssh` pacchetto sul server web. Una volta aggiornato l'ambiente e dopo che Amazon MWAA avrà installato correttamente la dipendenza, otterrai un nuovo tipo di connessione **SSH** nell'interfaccia utente.

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

**Nota**  
`-c`definisce l'URL dei vincoli in. `requirements.txt` Ciò garantisce che Amazon MWAA installi la versione del pacchetto corretta per il tuo ambiente.

## Copia la tua chiave segreta su Amazon S3
<a name="samples-ssh-secret"></a>

Usa il seguente AWS Command Line Interface comando per copiare la `.pem` chiave `dags` nella directory del tuo ambiente in Amazon S3.

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

Amazon MWAA copia il contenuto`dags`, inclusa la `.pem` chiave, nella `/usr/local/airflow/dags/` directory locale. In questo modo, Apache Airflow può accedere alla chiave.

## Creare una nuova connessione Apache Airflow
<a name="samples-ssh-connection"></a>

**Per creare una nuova connessione SSH utilizzando l'interfaccia utente di Apache Airflow**

1. Apri la pagina [Ambienti](https://console.aws.amazon.com/mwaa/home#/environments) sulla console Amazon MWAA.

1. Dall'elenco degli ambienti, scegli **Open Airflow UI** per il tuo ambiente.

1. **Nella pagina dell'interfaccia utente di Apache Airflow, **scegli** Amministratore dalla barra di navigazione principale per espandere l'elenco a discesa, quindi scegli Connessioni.**

1. Nella pagina **Elenco connessioni**, scegli **\$1** o il pulsante **Aggiungi un nuovo record** per aggiungere una nuova connessione.

1. Nella pagina **Aggiungi connessione**, aggiungi le seguenti informazioni:

   1. Per **ID di connessione**, immettere**ssh\$1new**.

   1. Per **Tipo di connessione**, scegli **SSH** dall'elenco a discesa.
**Nota**  
Se il tipo di connessione **SSH** non è disponibile nell'elenco, Amazon MWAA non ha installato il pacchetto richiesto. `apache-airflow-providers-ssh` Aggiorna il `requirements.txt` file per includere questo pacchetto, quindi riprova.

   1. Per **Host**, inserisci l'indirizzo IP dell' EC2 istanza Amazon a cui desideri connetterti. Ad esempio, **12.345.67.89**.

   1. Per **Nome utente**, inserisci **ec2-user** se ti stai connettendo a un' EC2 istanza Amazon. Il tuo nome utente potrebbe essere diverso, a seconda del tipo di istanza remota a cui desideri connettere Apache Airflow.

   1. Per **Extra**, inserisci la seguente coppia chiave-valore in formato JSON:

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

      Questa coppia chiave-valore indica ad Apache Airflow di cercare la chiave segreta nella directory locale. `/dags`

## Esempio di codice
<a name="samples-ssh-code"></a>

Il seguente DAG utilizza il `SSHOperator` per connettersi all' EC2istanza Amazon di destinazione, quindi esegue il comando `hostname` Linux per stampare il nome dell'istanza. È possibile modificare il DAG per eseguire qualsiasi comando o script sull'istanza remota.

1. Apri un terminale e vai alla directory in cui è memorizzato il codice DAG. Ad esempio:

   ```
   cd dags
   ```

1. Copiate il contenuto del seguente esempio di codice e salvatelo localmente con nome. `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.  Esegui il AWS CLI comando seguente per copiare il DAG nel bucket del tuo ambiente, quindi attiva il DAG utilizzando l'interfaccia utente di Apache Airflow. 

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

1. In caso di successo, otterrete un output simile al seguente nei log delle attività del DAG: `ssh_task` `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
   ```