Connettersi a HDInsight (Hadoop) con SSH

Questo articolo illustra come usare Secure Shell (SSH) per stabilire una connessione sicura a Hadoop in Azure HDInsight.

HDInsight può usare Linux (Ubuntu) come sistema operativo per i nodi nel cluster Hadoop. La tabella seguente contiene le informazioni relative a indirizzo e porta necessarie per la connessione a HDInsight basato su Linux tramite un client SSH:

Indirizzo Porta Connessione a
<clustername>-ed-ssh.azurehdinsight.net 22 Nodo perimetrale (R Server in HDInsight)
<edgenodename>.<clustername>-ssh.azurehdinsight.net 22 Nodo perimetrale (qualsiasi tipo di cluster, se è presente un nodo perimetrale)
<clustername>-ssh.azurehdinsight.net 22 Nodo head primario
<clustername>-ssh.azurehdinsight.net 23 Nodo head secondario
Nota

Sostituire <edgenodename> con il nome del nodo perimetrale.

Sostituire <clustername> con il nome del cluster.

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.

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.

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

  • Azure Cloud Shell: Cloud Shell offre un ambiente Bash nel browser, oltre a ssh, scp e altri comandi Linux comuni.

  • Bash in Ubuntu in Windows 10: i comandi ssh e scp sono disponibili tramite Bash nella riga di comando di Windows.

  • Git (https://git-scm.com/): i comandi ssh e scp sono disponibili tramite la riga di comando GitBash.

  • GitHub Desktop (https://desktop.github.com/): i comandi ssh e scp sono disponibili tramite la riga di comando GitHub Shell. GitHub Desktop può essere configurato per usare Bash, il prompt dei comandi di Windows o PowerShell come riga di comando per Git Shell.

  • OpenSSH (https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH): il team di PowerShell sta introducendo OpenSSH in Windows e offre versioni di test.

    Avviso

    Il pacchetto OpenSSH include il componente server SSH, sshd. Tale componente avvia un server SSH nel sistema, consentendo così ad altri di connettersi. Non configurare questo componente né aprire la porta 22 a meno che non si voglia ospitare un server SSH nel sistema. Non è necessario per comunicare con HDInsight.

Sono disponibili anche diversi client SSH con interfaccia grafica, come PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) e MobaXterm (http://mobaxterm.mobatek.net/). 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 con interfaccia grafica usato.

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 delle chiavi 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
Portale di Azure Deselezionare Usa la stessa password dell'account di accesso del cluster e quindi selezionare Chiave pubblica come tipo di autenticazione SSH. Selezionare infine il file di chiave pubblica oppure incollare il contenuto di testo del file nel campo Chiave pubblica SSH.
Finestra di dialogo per la chiave pubblica SSH nella creazione di cluster HDInsight
Azure PowerShell Usare il parametro -SshPublicKey del cmdlet New-AzureRmHdinsightCluster e passare il contenuto della chiave pubblica come stringa.
Interfaccia della riga di comando di Azure 1.0 Usare il parametro --sshPublicKey del comando azure hdinsight cluster 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 con SSH, viene richiesto di immettere la password.

Avviso

Non è consigliabile 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.

Creare cluster HDInsight con una password

Metodo di creazione Come specificare la password
Portale di Azure Per impostazione predefinita, l'account utente SSH ha la stessa password dell'account di accesso del cluster. Per usare una password diversa, deselezionare Usa la stessa password dell'account di accesso del cluster e quindi immettere la password nel campo Password SSH.
Finestra di dialogo per la password SSH nella creazione di cluster HDInsight
Azure PowerShell Usare il parametro --SshCredential del cmdlet New-AzureRmHdinsightCluster e passare un oggetto PSCredential contenente il nome e la password dell'account utente SSH.
Interfaccia della riga di comando di Azure 1.0 Usare il parametro --sshPassword del comando azure hdinsight cluster 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.

Autenticazione: HDInsight aggiunto al dominio

Se si usa un cluster HDInsight aggiunto al dominio, è necessario usare il comando kinit dopo la connessione con SSH. Questo comando richiede di specificare un utente di dominio e una password e autentica la sessione con il dominio di Azure Active Directory associato al cluster.

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.

Una volta stabilita 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@hn0-clustername:~$.

Connettersi a nodi del ruolo di lavoro e Zookeeper

I nodi del ruolo 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 dominio dei nodi del cluster, vedere il documento Gestire i cluster HDInsight con l'API REST 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 l'articolo su come usare una rete virtuale con 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 restituita alcuna informazione, ssh-agent non è in esecuzione. Per altre informazioni, vedere il contenuto relativo agli script di avvio agente in Using ssh-agent with ssh (http://mah.everybody.org/docs/ssh) (Uso di ssh-agent con ssh) o la documentazione del client SSH.

  4. Dopo avere verificato che ssh-agent è in esecuzione, usare il comando seguente 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.

Copiare i file

L'utilità scp può essere usata per copiare i file da e verso singoli nodi del cluster. Il comando seguente copia ad esempio la directory test.txt dal sistema locale al nodo head primario:

scp test.txt sshuser@clustername-ssh.azurehdinsight.net:

Poiché dopo : non è specificato alcun percorso, il file viene inserito nella home directory sshuser.

L'esempio seguente copia il file test.txt dalla home directory sshuser nel nodo head primario al sistema locale:

scp sshuser@clustername-ssh.azurehdinsight.net:test.txt .
Importante

scp può accedere solo al file system dei singoli nodi all'interno del cluster. Non può essere usato per accedere ai dati nell'archivio compatibile con HDFS per il cluster.

Usare scp quando è necessario caricare una risorsa per l'uso da una sessione SSH. Caricare ad esempio uno script Python e quindi eseguire lo script da una sessione SSH.

Per informazioni sul caricamento diretto dei dati nell'archivio compatibile con HDFS, vedere i documenti seguenti:

Passaggi successivi