Connettersi a HDInsight (Hadoop) con SSHConnect to HDInsight (Hadoop) using SSH

Questo articolo illustra come usare Secure Shell (SSH) per stabilire una connessione sicura a Hadoop in Azure HDInsight.Learn how to use Secure Shell (SSH) to securely connect to Hadoop on Azure HDInsight.

HDInsight può usare Linux (Ubuntu) come sistema operativo per i nodi nel cluster Hadoop.HDInsight can use Linux (Ubuntu) as the operating system for nodes within the Hadoop cluster. La tabella seguente contiene le informazioni relative a indirizzo e porta necessarie per la connessione a HDInsight basato su Linux tramite un client SSH:The following table contains the address and port information needed when connecting to Linux-based HDInsight using an SSH client:

IndirizzoAddress PortaPort Connessione aConnects to...
<clustername>-ed-ssh.azurehdinsight.net 2222 Nodo perimetrale (R Server in HDInsight)Edge node (R Server on HDInsight)
<edgenodename>.<clustername>-ssh.azurehdinsight.net 2222 Nodo perimetrale (qualsiasi tipo di cluster, se è presente un nodo perimetrale)Edge node (any other cluster type, if an edge node exists)
<clustername>-ssh.azurehdinsight.net 2222 Nodo head primarioPrimary headnode
<clustername>-ssh.azurehdinsight.net 2323 Nodo head secondarioSecondary headnode

Nota

Sostituire <edgenodename> con il nome del nodo perimetrale.Replace <edgenodename> with the name of the edge node.

Sostituire <clustername> con il nome del cluster.Replace <clustername> with the name of your cluster.

Se il cluster contiene un nodo perimetrale, è consigliabile connettersi sempre al nodo perimetrale usando SSH.If your cluster contains an edge node, we recommend that you always connect to the edge node using SSH. I nodi head ospitano servizi critici per l'integrità di Hadoop.The head nodes host services that are critical to the health of Hadoop. Il nodo perimetrale esegue solo quanto inserito dall'utente nel nodo stesso.The edge node runs only what you put on it.

Per altre informazioni sull'uso dei nodi perimetrali, vedere l'articolo su come usare nodi perimetrali in HDInsight.For more information on using edge nodes, see Use edge nodes 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.When you first connect to HDInsight, your SSH client may display a warning that the authenticity of the host can't be established. Quando richiesto, selezionare 'sì' per aggiungere l'host all'elenco di server attendibili del client SSH.When prompted select 'yes' to add the host to your SSH client's trusted server list.

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.If you have previously connected to a server with the same name, you may receive a warning that the stored host key does not match the host key of the server. Per informazioni su come rimuovere la voce esistente per il nome del server, vedere la documentazione per il client SSH.Consult the documentation for your SSH client on how to remove the existing entry for the server name.

Client SSHSSH clients

Nei sistemi Linux, Unix e macOS sono disponibili i comandi ssh e scp.Linux, Unix, and macOS systems provide the ssh and scp commands. Il client ssh viene in genere usato per creare una sessione della riga di comando remota con un sistema basato su Linux o Unix.The ssh client is commonly used to create a remote command-line session with a Linux or Unix-based system. Il client scp viene usato per la copia sicura dei file tra il client e il sistema remoto.The scp client is used to securely copy files between your client and the remote system.

Per impostazione predefinita, Microsoft Windows non installa client SSH.Microsoft Windows does not install any SSH clients by default. I client ssh e scp sono disponibili per Windows nei pacchetti seguenti:The ssh and scp clients are available for Windows through the following packages:

  • Client OpenSSH (versione beta): in Fall Creators Update andare a Impostazioni > App e funzionalità > Gestisci funzionalità facoltative > Aggiungi una funzionalità e selezionare il client OpenSSH.OpenSSH Client (Beta): In the Fall Creators Update, go to Settings > Apps & features > Manage optional features > Add a feature and select the OpenSSH Client.

    Nota

    Se dopo l'abilitazione di questa funzionalità i comandi ssh e scp non sono disponibili in PowerShell, disconnettersi e accedere di nuovo.If the ssh and scp commands are not available in PowerShell after enabling this feature, log out and back in.

  • Bash in Ubuntu in Windows 10: i comandi ssh e scp sono disponibili tramite Bash nella riga di comando di Windows.Bash on Ubuntu on Windows 10: The ssh and scp commands are available through the Bash on Windows command line.

  • Azure Cloud Shell: Cloud Shell offre un ambiente Bash nel browser, oltre a ssh, scp e altri comandi Linux comuni.Azure Cloud Shell: The Cloud Shell provides a Bash environment in your browser, and provides the ssh, scp, and other common Linux commands.

  • Git (https://git-scm.com/): i comandi ssh e scp sono disponibili tramite la riga di comando GitBash.Git (https://git-scm.com/): The ssh and scp commands are available through the GitBash command line.

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/).There are also several graphical SSH clients, such as PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) and 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.While these clients can be used to connect to HDInsight, the process of connecting is different than using the ssh utility. Per altre informazioni, vedere la documentazione del client con interfaccia grafica usato.For more information, see the documentation of the graphical client you are using.

Autenticazione: chiavi SSHAuthentication: SSH Keys

Le chiavi SSH usano la crittografia a chiave pubblica per autenticare le sessioni SSH.SSH keys use Public-key cryptography to authenticate SSH sessions. Le chiavi SSH sono più sicure delle password e consentono di proteggere facilmente l'accesso al cluster Hadoop.SSH keys are more secure than passwords, and provide an easy way to secure access to your Hadoop cluster.

Se l'account SSH è protetto con una chiave, al momento della connessione il client deve fornire la chiave privata corrispondente:If your SSH account is secured using a key, the client must provide the matching private key when you connect:

  • La maggior parte dei client può essere configurata per l'uso di una chiave predefinita.Most clients can be configured to use a default key. Negli ambienti Linux e Unix, ad esempio, il client ssh cerca una chiave privata in ~/.ssh/id_rsa.For example, the ssh client looks for a private key at ~/.ssh/id_rsa on Linux and Unix environments.

  • È possibile specificare il percorso di una chiave privata.You can specify the path to a private key. Con il client ssh, per specificare il percorso della chiave privata viene usato il parametro -i.With the ssh client, the -i parameter is used to specify the path to private key. Ad esempio, ssh -i ~/.ssh/id_rsa sshuser@myedge.mycluster-ssh.azurehdinsight.net.For example, 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).If you have multiple private keys for use with different servers, consider using a utility such as 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.The ssh-agent utility can be used to automatically select the key to use when establishing an SSH session.

Importante

Se si protegge la chiave privata con una passphrase, è necessario immettere la passphrase quando si usa la chiave.If you secure your private key with a passphrase, you must enter the passphrase when using the key. Per praticità, le utilità come ssh-agent possono memorizzare la password nella cache.Utilities such as ssh-agent can cache the password for your convenience.

Creare una coppia di chiavi SSHCreate an SSH key pair

Usare il comando ssh-keygen per creare i file di chiave pubblica e privata.Use the ssh-keygen command to create public and private key files. Il comando seguente genera una coppia di chiavi RSA a 2048 bit che può essere usata con HDInsight:The following command generates a 2048-bit RSA key pair that can be used with HDInsight:

ssh-keygen -t rsa -b 2048

Durante il processo di creazione delle chiavi vengono richieste informazioni,You are prompted for information during the key creation process. ad esempio la posizione di archiviazione delle chiavi o se deve essere usata una passphrase.For example, where the keys are stored or whether to use a passphrase. Al termine del processo vengono creati due file: una chiave pubblica e una chiave privata.After the process completes, two files are created; a public key and a private key.

  • La chiave pubblica viene usata per creare un cluster HDInsightThe public key is used to create an HDInsight cluster. e ha estensione .pub.The public key has an extension of .pub.

  • La chiave privata viene usata per autenticare il client nel cluster HDInsight.The private key is used to authenticate your client to the HDInsight cluster.

Importante

È possibile proteggere le chiavi con una passphrase,You can secure your keys using a passphrase. che è di fatto una password per la chiave privata.A passphrase is effectively a password on your private key. Se qualcuno entra in possesso della chiave privata, per usarla deve avere la passphrase.Even if someone obtains your private key, they must have the passphrase to use the key.

Creare cluster HDInsight con la chiave pubblicaCreate HDInsight using the public key

Metodo di creazioneCreation method Come usare la chiave pubblicaHow to use the public key
Portale di AzureAzure portal Deselezionare Usa la stessa password dell'account di accesso del cluster e quindi selezionare Chiave pubblica come tipo di autenticazione SSH.Uncheck Use same password as cluster login, and then select Public Key as the SSH authentication type. Selezionare infine il file di chiave pubblica oppure incollare il contenuto di testo del file nel campo Chiave pubblica SSH.Finally, select the public key file or paste the text contents of the file in the SSH public key field.
Finestra di dialogo per la chiave pubblica SSH nella creazione di cluster HDInsightSSH public key dialog in HDInsight cluster creation
Azure PowerShellAzure PowerShell Usare il parametro -SshPublicKey del cmdlet New-AzureRmHdinsightCluster e passare il contenuto della chiave pubblica come stringa.Use the -SshPublicKey parameter of the New-AzureRmHdinsightCluster cmdlet and pass the contents of the public key as a string.
Interfaccia della riga di comando di Azure 1.0Azure CLI 1.0 Usare il parametro --sshPublicKey del comando azure hdinsight cluster create e passare il contenuto della chiave pubblica come stringa.Use the --sshPublicKey parameter of the azure hdinsight cluster create command and pass the contents of the public key as a string.
Modello di Resource ManagerResource Manager Template Per un esempio dell'uso di SSH con un modello, vedere l'articolo su come distribuire HDInsight in Linux con una chiave SSH.For an example of using SSH keys with a template, see Deploy HDInsight on Linux with SSH key. L'elemento publicKeys del file azuredeploy.json viene usato per passare le chiavi ad Azure durante la creazione del cluster.The publicKeys element in the azuredeploy.json file is used to pass the keys to Azure when creating the cluster.

Autenticazione: passwordAuthentication: Password

Gli account SSH possono essere protetti con una password.SSH accounts can be secured using a password. Quando ci si connette a HDInsight con SSH, viene richiesto di immettere la password.When you connect to HDInsight using SSH, you are prompted to enter the password.

Avviso

Microsoft sconsiglia di usare l'autenticazione tramite password per SSH.Microsoft does not recommend using password authentication for SSH. Le password sono intuibili e vulnerabili ad attacchi di forza bruta.Passwords can be guessed and are vulnerable to brute force attacks. È consigliabile usare invece chiavi SSH per l'autenticazione.Instead, we recommend that you use SSH keys for authentication.

Creare cluster HDInsight con una passwordCreate HDInsight using a password

Metodo di creazioneCreation method Come specificare la passwordHow to specify the password
Portale di AzureAzure portal Per impostazione predefinita, l'account utente SSH ha la stessa password dell'account di accesso del cluster.By default, the SSH user account has the same password as the cluster login account. 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.To use a different password, uncheck Use same password as cluster login, and then enter the password in the SSH password field.
Finestra di dialogo per la password SSH nella creazione di cluster HDInsightSSH password dialog in HDInsight cluster creation
Azure PowerShellAzure PowerShell Usare il parametro --SshCredential del cmdlet New-AzureRmHdinsightCluster e passare un oggetto PSCredential contenente il nome e la password dell'account utente SSH.Use the --SshCredential parameter of the New-AzureRmHdinsightCluster cmdlet and pass a PSCredential object that contains the SSH user account name and password.
Interfaccia della riga di comando di Azure 1.0Azure CLI 1.0 Usare il parametro --sshPassword del comando azure hdinsight cluster create e specificare il valore della password.Use the --sshPassword parameter of the azure hdinsight cluster create command and provide the password value.
Modello di Resource ManagerResource Manager Template Per un esempio dell'uso di una password con un modello, vedere l'articolo su come distribuire HDInsight in Linux con una password SSH.For an example of using a password with a template, see Deploy HDInsight on Linux with SSH password. 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.The linuxOperatingSystemProfile element in the azuredeploy.json file is used to pass the SSH account name and password to Azure when creating the cluster.

Modificare la password SSHChange the SSH password

Per informazioni sulla modifica della password dell'account utente SSH, vedere la sezione Modificare le password del documento relativo alla gestione di HDInsight.For information on changing the SSH user account password, see the Change passwords section of the Manage HDInsight document.

Autenticazione: HDInsight aggiunto al dominioAuthentication: Domain-joined HDInsight

Se si usa un cluster HDInsight aggiunto al dominio, è necessario usare il comando kinit dopo la connessione con SSH.If you are using a domain-joined HDInsight cluster, you must use the kinit command after connecting with 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.This command prompts you for a domain user and password, and authenticates your session with the Azure Active Directory domain associated with the cluster.

Per altre informazioni, vedere Configurare i cluster HDInsight aggiunti al dominio.For more information, see Configure domain-joined HDInsight.

Stabilire la connessione ai nodiConnect to nodes

È possibile accedere ai nodi head e al nodo perimetrale (se presente) tramite Internet sulle porte 22 e 23.The head nodes and edge node (if there is one) can be accessed over the internet on ports 22 and 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.When connecting to the head nodes, use port 22 to connect to the primary head node and port 23 to connect to the secondary head node. Il nome di dominio completo da usare è clustername-ssh.azurehdinsight.net, dove clustername è il nome del cluster.The fully qualified domain name to use is clustername-ssh.azurehdinsight.net, where clustername is the name of your 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.When connecting to the edge node, use port 22. Il nome di dominio completo è edgenodename.clustername-ssh.azurehdinsight.net, dove edgenodename è un nome specificato durante la creazione del nodo perimetrale.The fully qualified domain name is edgenodename.clustername-ssh.azurehdinsight.net, where edgenodename is a name you provided when creating the edge node. clustername è il nome del cluster.clustername is the name of the 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.The previous examples assume that you are using password authentication, or that certificate authentication is occurring automatically. 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.If you use an SSH key-pair for authentication, and the certificate is not used automatically, use the -i parameter to specify the private key. Ad esempio, ssh -i ~/.ssh/mykey sshuser@clustername-ssh.azurehdinsight.net.For example, 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.Once connected, the prompt changes to indicate the SSH user name and the node you are connected to. Quando ad esempio si è connessi al nodo head primario come sshuser, il prompt è sshuser@hn0-clustername:~$.For example, when connected to the primary head node as sshuser, the prompt is sshuser@hn0-clustername:~$.

Connettersi a nodi del ruolo di lavoro e ZookeeperConnect to worker and Zookeeper nodes

I nodi del ruolo di lavoro e i nodi Zookeeper non sono direttamente accessibili da Internet,The worker nodes and Zookeeper nodes are not directly accessible from the internet. ma dai nodi head o perimetrali del cluster.They can be accessed from the cluster head nodes or edge nodes. Di seguito è riportata la procedura generale da seguire per connettersi ad altri nodi:The following are the general steps to connect to other nodes:

  1. Usare SSH per connettersi a un nodo head o perimetrale:Use SSH to connect to a head or edge node:

     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:From the SSH connection to the head or edge node, use the ssh command to connect to a worker node in the cluster:

     ssh sshuser@wn0-myhdi
    

    Per recuperare un elenco dei nomi di nodo, vedere il documento Gestire i cluster HDInsight con l'API REST Ambari.To retrieve a list of the node names, see the Manage HDInsight by using the Ambari REST API document.

Se l'account SSH viene protetto usando una password, immetterla quando ci si connette.If the SSH account is secured using a password, enter the password when connecting.

Se l'account SSH viene protetto usando chiavi SSH, verificare che l'inoltro SSH sia abilitato nel client.If the SSH account is secured using SSH keys, make sure that SSH forwarding is enabled on the client.

Nota

Un altro modo per accedere direttamente a tutti i nodi del cluster è installare HDInsight in una rete virtuale di Azure.Another way to directly access all nodes in the cluster is to install HDInsight into an Azure Virtual Network. È quindi possibile aggiungere il computer remoto alla stessa rete virtuale e accedere direttamente a tutti i nodi del cluster.Then, you can join your remote machine to the same virtual network and directly access all nodes in the cluster.

Per altre informazioni, vedere l'articolo su come usare una rete virtuale con HDInsight.For more information, see Use a virtual network with HDInsight.

Configurare l'inoltro dell'agente SSHConfigure SSH agent forwarding

Importante

La procedura seguente presuppone l'uso di un sistema basato su Linux o UNIX e di Bash per Windows 10.The following steps assume a Linux or UNIX-based system, and work with Bash on Windows 10. Se la procedura non funziona per il sistema corrente, è consigliabile vedere la documentazione del client SSH.If these steps do not work for your system, you may need to consult the documentation for your SSH client.

  1. Usando un editor di testo, aprire ~/.ssh/config.Using a text editor, open ~/.ssh/config. Se questo file non esiste, è possibile crearlo immettendo touch ~/.ssh/config nella riga di comando.If this file doesn't exist, you can create it by entering touch ~/.ssh/config at a command line.

  2. Aggiungere il testo seguente al file config.Add the following text to the config file.

     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.Replace the Host information with the address of the node you connect to using SSH. L'esempio precedente usa il nodo perimetrale.The previous example uses the edge node. Questa voce configura l'inoltro dell'agente SSH per il nodo specificato.This entry configures SSH agent forwarding for the specified node.

  3. Testare l'inoltro dell'agente SSH tramite il comando seguente dal terminale:Test SSH agent forwarding by using the following command from the terminal:

     echo "$SSH_AUTH_SOCK"
    

    Questo comando restituisce informazioni simili al testo seguente:This command returns information similar to the following text:

     /tmp/ssh-rfSUL1ldCldQ/agent.1792
    

    Se non viene restituita alcuna informazione, ssh-agent non è in esecuzione.If nothing is returned, then ssh-agent is not running. 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.For more information, see the agent startup scripts information at Using ssh-agent with ssh (http://mah.everybody.org/docs/ssh) or consult your SSH client documentation.

  4. Dopo avere verificato che ssh-agent è in esecuzione, usare il comando seguente per aggiungere la chiave privata SSH all'agente:Once you have verified that ssh-agent is running, use the following to add your SSH private key to the agent:

     ssh-add ~/.ssh/id_rsa
    

    Se la chiave privata viene archiviata in un altro file, sostituire ~/.ssh/id_rsa con il percorso del file.If your private key is stored in a different file, replace ~/.ssh/id_rsa with the path to the file.

  5. Connettersi ai nodi head o al nodo perimetrale del cluster con SSH.Connect to the cluster edge node or head nodes using SSH. Usare quindi il comando SSH per connettersi a un nodo del ruolo di lavoro o Zookeeper.Then use the SSH command to connect to a worker or zookeeper node. La connessione viene stabilita usando la chiave inoltrata.The connection is established using the forwarded key.

Copiare i fileCopy files

L'utilità scp può essere usata per copiare i file da e verso singoli nodi del cluster.The scp utility can be used to copy files to and from individual nodes in the cluster. Il comando seguente copia ad esempio la directory test.txt dal sistema locale al nodo head primario:For example, the following command copies the test.txt directory from the local system to the primary head node:

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

Poiché dopo : non è specificato alcun percorso, il file viene inserito nella home directory sshuser.Since no path is specified after the :, the file is placed in the sshuser home directory.

L'esempio seguente copia il file test.txt dalla home directory sshuser nel nodo head primario al sistema locale:The following example copies the test.txt file from the sshuser home directory on the primary head node to the local system:

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

Importante

scp può accedere solo al file system dei singoli nodi all'interno del cluster.scp can only access the file system of individual nodes within the cluster. Non può essere usato per accedere ai dati nell'archivio compatibile con HDFS per il cluster.It cannot be used to access data in the HDFS-compatible storage for the cluster.

Usare scp quando è necessario caricare una risorsa per l'uso da una sessione SSH.Use scp when you need to upload a resource for use from an SSH session. Caricare ad esempio uno script Python e quindi eseguire lo script da una sessione SSH.For example, upload a Python script and then run the script from an SSH session.

Per informazioni sul caricamento diretto dei dati nell'archivio compatibile con HDFS, vedere i documenti seguenti:For information on directly loading data into the HDFS-compatible storage, see the following documents:

Passaggi successiviNext steps