Connettersi a HDInsight (Apache Hadoop) con SSH

Questo articolo illustra come usare Secure Shell (SSH) per stabilire una connessione sicura a Apache Hadoop in Azure HDInsight. Per informazioni sulla connessione tramite una rete virtuale, vedere Architettura di rete virtuale di Azure HDInsight. Vedere anche Pianificare una distribuzione di rete virtuale per i cluster Azure HDInsight.

La tabella seguente contiene l'indirizzo e le informazioni sulla porta necessarie per la connessione a HDInsight tramite un client SSH:

Indirizzo Port Connessione a
<clustername>-ssh.azurehdinsight.net 22 Nodo head primario
<clustername>-ssh.azurehdinsight.net 23 Nodo head secondario
<edgenodename>.<clustername>-ssh.azurehdinsight.net 22 nodo perimetrale (qualsiasi altro tipo di cluster, se esiste un nodo perimetrale)

Sostituire <clustername> con il nome del cluster. Sostituire <edgenodename> con il nome del nodo perimetrale.

Se il cluster contiene un nodo perimetrale, è consigliabile connettersi sempre al nodo perimetrale usando SSH. I nodi head ospitano servizi critici per l'integrità di Hadoop. Il nodo perimetrale esegue solo quanto inserito dall'utente nel nodo stesso. Per altre informazioni sull'uso dei nodi perimetrali, vedere l'articolo su come usare nodi perimetrali in HDInsight.

Suggerimento

Alla prima connessione a HDInsight, è possibile che il client SSH visualizzi un avviso relativo all'impossibilità di confermare l'autenticità dell'host. Quando richiesto, selezionare 'sì' per aggiungere l'host all'elenco di server attendibili del client SSH.

Se è già stata effettuata in precedenza una connessione a un server con lo stesso nome, è possibile che venga visualizzato un avviso relativo alla mancata corrispondenza della chiave host archiviata con la chiave host del server. Per informazioni su come rimuovere la voce esistente per il nome del server, vedere la documentazione per il client SSH.

Client SSH

Nei sistemi Linux, Unix e macOS sono disponibili i comandi ssh e scp. Il client ssh viene in genere usato per creare una sessione della riga di comando remota con un sistema basato su Linux o Unix. Il client scp viene usato per la copia sicura dei file tra il client e il sistema remoto.

Microsoft Windows non installa client SSH per impostazione predefinita. I client ssh e scp sono disponibili per Windows nei pacchetti seguenti:

Esistono anche diversi client SSH grafici, ad esempio PuTTY e MobaXterm. Anche se questi client possono essere usati per connettersi a HDInsight, il processo di connessione è diverso rispetto a quello tramite l'utilità ssh. Per altre informazioni, vedere la documentazione del client grafico in uso.

Autenticazione: chiavi SSH

Le chiavi SSH usano la crittografia a chiave pubblica per autenticare le sessioni SSH. Le chiavi SSH sono più sicure delle password e consentono di proteggere facilmente l'accesso al cluster Hadoop.

Se l'account SSH è protetto con una chiave, al momento della connessione il client deve fornire la chiave privata corrispondente:

  • La maggior parte dei client può essere configurata per l'uso di una chiave predefinita. Negli ambienti Linux e Unix, ad esempio, il client ssh cerca una chiave privata in ~/.ssh/id_rsa.

  • È possibile specificare il percorso di una chiave privata. Con il client ssh, per specificare il percorso della chiave privata viene usato il parametro -i. Ad esempio: ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.

  • Se si hanno più chiavi private per server diversi, considerare la possibilità di usare un'utilità come ssh-agent (https://en.wikipedia.org/wiki/Ssh-agent). L'utilità ssh-agent consente di selezionare automaticamente la chiave da usare quando si stabilisce una sessione SSH.

Importante

Se si protegge la chiave privata con una passphrase, è necessario immettere la passphrase quando si usa la chiave. Per praticità, le utilità come ssh-agent possono memorizzare la password nella cache.

Creare una coppia di chiavi SSH

Usare il comando ssh-keygen per creare i file di chiave pubblica e privata. Il comando seguente genera una coppia di chiavi RSA a 2048 bit che può essere usata con HDInsight:

ssh-keygen -t rsa -b 2048

Durante il processo di creazione della chiave vengono richieste informazioni. ad esempio la posizione di archiviazione delle chiavi o se deve essere usata una passphrase. Al termine del processo vengono creati due file: una chiave pubblica e una chiave privata.

  • La chiave pubblica viene usata per creare un cluster HDInsight e ha estensione .pub.

  • La chiave privata viene usata per autenticare il client nel cluster HDInsight.

Importante

È possibile proteggere le chiavi con una passphrase, che è di fatto una password per la chiave privata. Se qualcuno entra in possesso della chiave privata, per usarla deve avere la passphrase.

Creare cluster HDInsight con la chiave pubblica

Metodo di creazione Come usare la chiave pubblica
Azure portal Deselezionare Usa password di accesso del cluster per SSH e quindi selezionare Chiave pubblica come tipo di autenticazione SSH. Infine, selezionare il file di chiave pubblica o incollare il contenuto del testo del file nel campo Chiave pubblica SSH.
SSH public key dialog in HDInsight cluster creation.
Azure PowerShell Usare il -SshPublicKey parametro del cmdlet New-AzHdinsightCluster e passare il contenuto della chiave pubblica come stringa.
Interfaccia della riga di comando di Azure Usare il parametro --sshPublicKey del comando az hdinsight create e passare il contenuto della chiave pubblica come stringa.
Modello di Resource Manager Per un esempio dell'uso di SSH con un modello, vedere l'articolo su come distribuire HDInsight in Linux con una chiave SSH. L'elemento publicKeys del file azuredeploy.json viene usato per passare le chiavi ad Azure durante la creazione del cluster.

Autenticazione: password

Gli account SSH possono essere protetti con una password. Quando ci si connette a HDInsight tramite SSH, viene richiesto di immettere la password.

Avviso

Microsoft sconsiglia di usare l'autenticazione tramite password per SSH. Le password sono intuibili e vulnerabili ad attacchi di forza bruta. È consigliabile usare invece chiavi SSH per l'autenticazione.

Importante

La password dell'account SSH scade 70 giorni dopo aver creato il cluster HDInsight. Se la password scade, è possibile modificarla tramite le informazioni contenute nel documento relativo alla gestione di HDInsight.

Creare cluster HDInsight con una password

Metodo di creazione Come specificare la password
Azure portal Per impostazione predefinita, l'account utente SSH ha la stessa password dell'account di accesso del cluster. Per usare una password diversa, deselezionare Usa password di accesso del cluster per SSH e quindi immettere la password nel campo Password SSH.
SSH password dialog in HDInsight cluster creation.
Azure PowerShell Usare il --SshCredential parametro del cmdlet New-AzHdinsightCluster e passare un PSCredential oggetto contenente il nome e la password dell'account utente SSH.
Interfaccia della riga di comando di Azure Usare il parametro --ssh-password del comando az hdinsight create e specificare il valore della password.
Modello di Resource Manager Per un esempio dell'uso di una password con un modello, vedere l'articolo su come distribuire HDInsight in Linux con una password SSH. L'elemento linuxOperatingSystemProfile del file azuredeploy.json viene usato per passare il nome e la password dell'account SSH ad Azure durante la creazione del cluster.

Modificare la password SSH

Per informazioni sulla modifica della password dell'account utente SSH, vedere la sezione Modificare le password del documento relativo alla gestione di HDInsight.

HDInsight aggiunto al dominio di autenticazione

Se si usa un cluster HDInsight aggiunto a un dominio, è necessario usare il kinit comando dopo la connessione con l'utente locale SSH. Questo comando richiede un utente di dominio e una password e autentica la sessione con il dominio Microsoft Entra associato al cluster.

È anche possibile abilitare l'autenticazione Kerberos in ogni nodo aggiunto al dominio( ad esempio, nodo head, nodo perimetrale) per ssh usando l'account di dominio. A tale scopo, modificare il file di configurazione sshd:

sudo vi /etc/ssh/sshd_config

rimuovere il commento e modificare KerberosAuthentication su yes

sudo service sshd restart

Usare klist il comando per verificare se l'autenticazione Kerberos ha avuto esito positivo.

Per altre informazioni, vedere Configurare i cluster HDInsight aggiunti al dominio.

Stabilire la connessione ai nodi

È possibile accedere ai nodi head e al nodo perimetrale (se presente) tramite Internet sulle porte 22 e 23.

  • Quando ci si connette ai nodi head, usare la porta 22 per la connessione al nodo head primario e la porta 23 per la connessione al nodo head secondario. Il nome di dominio completo da usare è clustername-ssh.azurehdinsight.net, dove clustername è il nome del cluster.

    # Connect to primary head node
    # port not specified since 22 is the default
    ssh sshuser@clustername-ssh.azurehdinsight.net
    
    # Connect to secondary head node
    ssh -p 23 sshuser@clustername-ssh.azurehdinsight.net
    
  • Quando ci si connette al nodo perimetrale, usare la porta 22. Il nome di dominio completo è edgenodename.clustername-ssh.azurehdinsight.net, dove edgenodename è un nome specificato durante la creazione del nodo perimetrale. clustername è il nome del cluster.

    # Connect to edge node
    ssh sshuser@edgnodename.clustername-ssh.azurehdinsight.net
    

Importante

Gli esempi precedenti presuppongono l'uso dell'autenticazione della password o che l'autenticazione del certificato avvenga automaticamente. Se si usa una coppia di chiavi SSH per l'autenticazione e il certificato non viene usato automaticamente, usare il parametro -i per specificare la chiave privata. Ad esempio: ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.

Dopo la connessione, il prompt cambia per indicare il nome utente SSH e il nodo a cui si è connessi. Quando ad esempio si è connessi al nodo head primario come sshuser, il prompt è sshuser@<active-headnode-name>:~$.

Connettersi a nodi del ruolo di lavoro e Apache Zookeeper

I nodi di lavoro e i nodi Zookeeper non sono direttamente accessibili da Internet. ma dai nodi head o perimetrali del cluster. Di seguito è riportata la procedura generale da seguire per connettersi ad altri nodi:

  1. Usare SSH per connettersi a un nodo head o perimetrale:

    ssh sshuser@myedge.mycluster-ssh.azurehdinsight.net
    
  2. Dalla connessione SSH al nodo head o perimetrale, usare il comando ssh per connettersi a un nodo di lavoro nel cluster:

    ssh sshuser@wn0-myhdi
    

    Per recuperare un elenco dei nomi di nodo, vedere il documento Gestire i cluster HDInsight con l'API REST Apache Ambari.

Se l'account SSH viene protetto usando una password, immetterla quando ci si connette.

Se l'account SSH viene protetto usando chiavi SSH, verificare che l'inoltro SSH sia abilitato nel client.

Nota

Un altro modo per accedere direttamente a tutti i nodi del cluster è installare HDInsight in una rete virtuale di Azure. È quindi possibile aggiungere il computer remoto alla stessa rete virtuale e accedere direttamente a tutti i nodi del cluster.

Per altre informazioni, vedere Pianificare una rete virtuale per HDInsight.

Configurare l'inoltro dell'agente SSH

Importante

La procedura seguente presuppone l'uso di un sistema basato su Linux o UNIX e di Bash per Windows 10. Se la procedura non funziona per il sistema corrente, è consigliabile vedere la documentazione del client SSH.

  1. Usando un editor di testo, aprire ~/.ssh/config. Se questo file non esiste, è possibile crearlo immettendo touch ~/.ssh/config nella riga di comando.

  2. Aggiungere il testo seguente al file config.

    Host <edgenodename>.<clustername>-ssh.azurehdinsight.net
        ForwardAgent yes
    

    Sostituire le informazioni di Host con l'indirizzo del nodo a cui ci si connette con SSH. L'esempio precedente usa il nodo perimetrale. Questa voce configura l'inoltro dell'agente SSH per il nodo specificato.

  3. Testare l'inoltro dell'agente SSH tramite il comando seguente dal terminale:

    echo "$SSH_AUTH_SOCK"
    

    Questo comando restituisce informazioni simili al testo seguente:

    /tmp/ssh-rfSUL1ldCldQ/agent.1792
    

    Se non viene restituito alcun risultato, ssh-agent non è in esecuzione.

  4. Dopo aver verificato che ssh-agent è in esecuzione, usare quanto segue per aggiungere la chiave privata SSH all'agente:

    ssh-add ~/.ssh/id_rsa
    

    Se la chiave privata viene archiviata in un altro file, sostituire ~/.ssh/id_rsa con il percorso del file.

  5. Connettersi ai nodi head o al nodo perimetrale del cluster con SSH. Usare quindi il comando SSH per connettersi a un nodo del ruolo di lavoro o Zookeeper. La connessione viene stabilita usando la chiave inoltrata.

Passaggi successivi